String的valueOf方法 (大部分类型 -> String)
String.valueOf(char[] data)
: 将 char 数组 data 转换成字符串。String.valueOf(char[] data, int offset, int count)
: 将 char 数组 data 中 由data[offset]
开始取 count 个元素转换成字符串。
String的charAt和toCharArray(String -> char[ ])
- 使用
String.charAt(index)
(返回值为char)可以得到String中某一指定位置的char。 - 使用
String.toCharArray()
(返回值为char[])可以得到将包含整个String的char数组。从0开始的位置索引来访问string中的任意位置的元素。
String.join
String.join方法是JDK1.8之后新增的一个静态方法
String result = String.join("-","a","b","c","d");
// 输出结果如下:a-b-c-d
String[] arr = {"a","b","c","d"};
String result = String.join("-",arr);
// 输出结果如下:a-b-c-d
List<String> list = new ArrayList<>();
list.add("StringUtils");
list.add("join");
String join = StringUtils.join(list,"-");//跟上边参数反过来!
// 输出结果:StringUtils-join
substring方法
用于提取字符串中介于两个指定下标之间的字符。
stringObject.substring(start,stop)
区间是 [ )。
Integer的valueOf和parseInt方法(string -> int)
Integer. valueOf()
可以将基本类型int转换为包装类型Integer,或者将String转换成Integer,String如果为Null或””都会报错。Integer.parseInt()
是把()里的内容转换成Integer。Integer.parseInt(String)
遇到一些不能被转换为整型的字符时,会抛出异常。(Long.parseLong(String)
差不多意思)
字符串可以强转ASCII
数组 char[ ] 无法直接强转ASCII,要一个一个遍历强转ASCII,也可以转字符串转。
char[] chars = new char[]{'1', '2', 'j', 'q'};
String str = String.valueOf(chars);
//String str = new String(chars);
int ascii = (int) str.charAt(i);
int ascii = (int) chars[i];
toLowerCase
把字符串转换为小写字符串
String str1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
System.out.println(str1.toLowerCase());
output:abcdefghijklmnopqrstuvwxyz
toUpperCase
把字符串转换为大写字符串
String str1 = "abcdefghijklmnopqrstuvwxyz";
System.out.println(str2.toUpperCase());
output:ABCDEFGHIJKLMNOPQRSTUVWXYZ
equalsIgnoreCase
equalsIgnoreCase(String anotherString)
:比较字符串的内容是否相同,忽略大小写
String str = "adsfaxsdfas沙发";
System.out.println(str.equalsIgnoreCase("ADsfaxsdfAs沙发"));
output:true
split
split()
:去除字符串中指定的的字符,然后返回一个新的字符串
public static void main(String[] args) {
String str = "adsfaxsdfas";
// 以a为点分割字符串
String array[] = str.split("a");
printString(array);
}
public static void printString(String a[]) {
for(int i=0;i<a.length;i++) {
// 重新拼起来
System.out.print(a[i]);
}
}
截取字符串str中指定字符串 strStart、strEnd之间的字符串
/**
* 截取字符串str中指定字符 strStart、strEnd之间的字符串
*
* @param str 待截取的字符串
* @param strStart 起始字符或字符串
* @param strEnd 截止字符或字符串
* @return
*/
public String subString(String str, String strStart, String strEnd) {
// 找出指定的2个字符在该字符串里面的位置
int strStartIndex = str.indexOf(strStart);
int strEndIndex = str.indexOf(strEnd);
// index为负数,即表示该字符串中没有该字符
if (strStartIndex < 0) {
return "字符串 :---->" + str + "<---- 中不存在 " + strStart + ", 无法截取目标字符串";
}
if (strEndIndex < 0) {
return "字符串 :---->" + str + "<---- 中不存在 " + strEnd + ", 无法截取目标字符串";
}
// 开始截取
return str.substring(strStartIndex, strEndIndex).substring(strStart.length());
}
String的replace和replaceAll方法
replace方法:支持字符和字符串的替换。
replaceAll方法:基于正则表达式的字符串替换。
正则表达式
\w 的释义一般都是指包含大、小写字母数字和下划线,相当于[a-zA-Z0-9_]
。
在支持ASCII码的语言中,如JavaScript,“\w”等价于[a-zA-Z0-9_]
;
在支持Unicode的语言中,如.NET,默认情况下,“\w”除可以匹配[a-zA-Z0-9_]
外,还可以匹配一些Unicode字符集,如汉字,全角数字,希腊字母等等。
几乎所有常见的语言都遵循这样一个规律,只有Java是个例外。在Java中,“\w”的表现是比较奇怪的,Java是支持Unicode的,但Java的正则中的“\w”却是等价于[a-zA-Z0-9_]
。
Java中的\
在 Java 中,\\
表示:我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。
所以,在其他的语言中(如Perl),一个反斜杠 \
就足以具有转义的作用,而在 Java 中正则表达式中则需要有两个反斜杠才能被解析为其他语言中的转义作用。
也可以简单的理解在 Java 的正则表达式中,两个 \\
代表其他语言中的一个 \
,这也就是为什么表示一位数字的正则表达式是 \\d
,而表示一个普通的反斜杠是 \\\\
。
\w 匹配字母或数字或下划线或汉字 等价于 ‘[^A-Za-z0-9_]’。(word)
\s 匹配任意的空白符(space)
\d 匹配数字(digit)
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
. 匹配除换行符以外的任意字符
*
匹配0或多个正好在它之前的那个字符。例如正则表达式.*
意味着能够匹配任意数量的任何字符。? 匹配0或1个正好在它之前的那个字符。注意:这个元字符不是所有的软件都支持的。
中括号[]
表示匹配其中任意字符
[]+
是匹配紧跟其前面那个字符的 一次或多次
[\w./:]+
就是一或多次匹配任何数字,字母,下划线,斜杠,还有英文的句号(一个点)还有冒号,比如http://arthurjq.com
最后附上一张图
Pattern.compile
使用的是Java中的Pattern.compile函数来实现对指定字符串的截取
// Pattern.compile函数语法
Pattern Pattern.compile(String regex, int flag)
//例子
Pattern p=Pattern.compile("\\d+");
Matcher m=p.matcher("22bb23");
m.matches();//返回false,因为bb不能被\d+匹配,导致整个字符串匹配未成功.
Matcher m2=p.matcher("2223");
m2.matches();//返回true,因为\d+匹配到了整个字符串
m=p.matcher("22bb23");
m.find();//返回true
m2=p.matcher("aa2223");
m2.find();//返回true
Matcher m3=p.matcher("aa2223bb");
m3.find();//返回true
Matcher m4=p.matcher("aabb");
m4.find();//返回false
m=p.matcher("22bb23");
m.lookingAt();//返回true,因为\d+匹配到了前面的22
m2=p.matcher("aa2223");
m2.lookingAt();//返回false,因为\d+不能匹配前面的aa
m=p.matcher("aaa2223bb");
m.find();//匹配2223
m.start();//返回3
m.end();//返回7,返回的是2223后的索引号
m.group();//返回2223
Pattern p=Pattern.compile("([a-z]+)(\\d+)");
Matcher m=p.matcher("aaa2223bb");
m.find(); //匹配aaa2223
m.groupCount(); //返回2,因为有2组
m.start(1); //返回0 返回第一组匹配到的子字符串在字符串中的索引号
m.start(2); //返回3
m.end(1); //返回3 返回第一组匹配到的子字符串的最后一个字符在字符串中的索引位置.
m.end(2); //返回7
m.group(1); //返回aaa,返回第一组匹配到的子字符串
m.group(2); //返回2223,返回第二组匹配到的子字符串