前提提要:代码块中均为伪代码,不是正式规格代码,只是为了方便大家观看方便易解,有错误请指正
【String的方法】
1、获取长度
String str = "sdfkhkbsdk";
str.length(); ————> 10
2、获取字符串各个索引位置的‘字符’
String str = "sdfkhkbsdk";
str.charAt(0); ——> 's'
3、返回指定字符在此字符串中第一次出现处的索引(如果没有返回-1);(数字是ASCII码中对应的字符数值)
String str ="abcdefg";
System.out.println( str.indexOf(97) ); ——> 这里97指'a'的ASCII码值,结果是0
System.out.println( str.indexOf("b") ); ——> 结果是1
(比较少用,但是用到会很方便:【.lastIndexOf(字符串)】方法,查找对应字符最后在字符串中出现的索引位置,如果没有则返回-1
例子:System.out.println(str.indexOf("e")); ——> 4
4、获得原字符串的子字符串
(1)从指定位置开始截取字符串,默认到末尾;
String str ="abcdefg";
System.out.println( str.substring(2) ); ——> "cdefg"
(2)指定区间的子字符串
String str ="abcdefg";
System.out.println( str.substring(2,5)); ——> "cde"
注意!substring(2,5)这里的不包括到该索引5所在的字符'f',所以要获得'f'位置的数就要(2,5+1)
5、比较字符串
(1)string1 == string2
这种比较的是字符串的【值或地址】
当是【基本数据类型】时就是比较【值】,比如:
String s1 = "123"; String s2 = "123"; s1 == s2 ——> true
当是【引用数据类型】时就是比较【地址】,比如:
String s1 = "123";
String s2 = new String("123");//这里说s2是new出来的,是引用数据类型
String s3 = String.valueOf(123);//用了String的value方法也是引用数据类型
System.out.print(s1==s2); ——> false
System.out.print(s1==s3); ——> false
(2)string1.equals(string2)【稳!】
String s1 = "123";
String s2 = new String("123");
s1.equals(s2); ——> true
(3)equalslgnoreCase()
方法与equals()方法完全相同,唯一不同是equalslgnoreCase()方法比较时不区分大小写
String str1="abc";
String str2="ABC";
System.out.println(str1.equalslgnoreCase(str2)); ——> true
(4)”startsWith单词“ 和 ”endsWith单词“
判断该字符串的开头或结尾是不是指定的单词
【第一种】:注意不需要.或者(),直接跟单词,而且只能是标准单词,比如这样不行:(startsWithHell × / startsWithHello √)
String str = "Hello70187开脚本创建 吉安市 djshbcsk 的手机存储卡World";
boolean startsWithHello = str.startsWithHello; ——> true
boolean endsWithWorld = str.endsWithWorld; ——> true
String str = "Heloo Wold";
boolean startsWithHello = str.startsWith("Hello"); ——> false
boolean endsWithWorld = str.endsWith("World"); ——> false
【第二种】:可以是不标准单词,但需要带()
String str = "Hello70187开脚本创建 吉安市 djshbcsk 的手机存储卡World";
boolean startsWithHello = str.startsWith("Hel"); ——> true
boolean endsWithWorld = str.endsWith("ld"); ——> true
(5)非常重要!!!匹配【正则表达式】
String.matches()
例子:
String str = "123456";
boolean isNumeric = str.matches("\\d+"); ——> true
(补充正则表达式)
// 1、^表达字符串开头 拓:1、匹配中文字符的正则表达式: [\u4e00-\u9fa5]
// 如果在方括号里[^],表示“除了...” 2、匹配空行的正则表达式:\n[\s| ]*\r
// 2、[]表示范围,仅占一个字符 3、匹配HTML标记的正则表达式:/<(.)>.</\1>|<(.*) />/
// 3、[1-5]则是表示可以是数字1-5任意一个 4、匹配首尾空格的正则表达式:(^\s*)|(\s*$)
// 4、\d表示数字(等于[0-9]) 5、匹配IP地址的正则表达式:/(\d+).(\d+).(\d+).(\d+)/g //
// \w表示英文字母、数字、_下划线(等于[a-z0-9A-Z_]) 6、匹配Email地址的正则表达式:\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*
// \s表示空白字符(空格、Tab键、换行符) 7、匹配网址URL的正则表达式:http://(/[\w-]+.)+[\w-]+(/[\w- ./?%&=]*)?
// \D是\d相反:除了数字 8、sql语句:^(select|drop|delete|create|update|insert).*$
// \W是\w相反:即空白字符 9、正浮点数:^((0-9)+.[0-9]*[1-9][0-9])|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9][1-9][0-9]*))$
// \S是\s相反: 即有效字符 10、非正浮点数:^((-\d+.\d+)?)|(0+(.0+)?))$
// 5、【非常重要!】java不解析一个\的转义字符
// 必须要两个\\!!!!比如:\\d、\\.、\\s
// 反正所有带\的转义字符都必须两个\\
// 6、【也重要!】“.”不带转义字符时代表“任意字符”
// 即可以是英文、中文、空格、乱码、狗屎...任何东西 【注意转义字符是反斜杠”\\“而不是正斜杠”//“!!!!!】
// “//.”才是小数点!!! "()"、"[]"、"{}"、"."......这些转义字符在正则表达式里有很强的语义作用
// 7、分析正则表达式思路,分块来写: 必须要用反斜杠"\\",而且!!!【多个分隔符一定要带[],因为不带的话计算机会认为“[\\(\\)\\[\\]”这么一大串是“一个”分隔符】
// 【1】首先得有选项,而且是在1-5之间,所以^[1-5] 例子:
// 【2】然后是“:”,直接写就行 要匹配分割下面这个字符串:“我(张三)是[简直是]傻逼{小可爱}”
// 【3】难点来了,因为根据选项[1-5]有三种数据输入 String str = "我(张三)是[简直是]傻逼{小可爱}";
// 要么输入一对坐标,要么两对,要么三对 String[] s = str.split("[\\(\\)\\[\\]\\{\\}]");
// 但至少得有一对坐标,那就可以先设置一对坐标判断输入格式
// 然后判断 (一对坐标)+ "至少一个或多个或{2,4}" for(String i:s){
// 【4】有无小数就(\\.\\d+)? "有小数点后面就得有数字,然后小数点跟后面数字可有可无" System.out.printt(i+" "); ——> 我 张三 是 简直是 傻逼 小可爱
// [-+]?\\d+(\\.\\d+)? 代表一个数字(可带正负号、小数) }
// [-+]?\\d+(\\.\\d+)?\\s? 的“\\s?”代表每对坐标之间间隔的空格,一对坐标就不用空格
// ([-+]?\\d+(\\.\\d+)?,[-+]?\\d+(\\.\\d+)?\\s?) 代表一对坐标
还有!!!!“$数字”是匹配正则表达式里()分组的第几个,比如例子:
String s="abacar";
s = s.replaceAll("a(\\w)a(\\w)a(\\w)",".$1.$2.$3"); ——> 这里$1对应第一个a(\\w)的(\\w),也就是ab的b;$2对应第二个a(\\w)的(\\w),也就是ac的c;$3对应第三个a(\\w)的(\\w),也就是ar的r;然后替换成“.”
System.out.println(s); ————> .b.c.r
(6)根据每个字母进行ASCII码值加减,返回结果,其实没啥用,少用
String str = "abcde";
String str1 = "abcdef";
String str2 = "abcde";
int isSame1 = str.compareTo(str1); ——> -1
int isSame2 = str.compareTo(str2); ——> 0
6、判断字符串是否【包含子字符串】,这样就不需要再拆分字符串然后又比较啥的那么麻烦
String.contains("字符串");
例子:
String str ="abcdefg";
System.out.println( str.contains("ab") ); ——> true
7、判断字符串是否为空
String.isEmpty();
例子:
String str ="abcdefg";
System.out.println( str.isEmpty() ); ——> false
【常用的字符串与其他类型转换功能】
----------------------------------------------------------------------------------
8、【字符串】转【数字】
String str = "123";
int num1 = Integer.parseInt(str);
double num2 = Interge.parseDouble(str);
float num3 = Interge.parseFloat(str);
long num4 = Interge.parseLong(str);
short num5 = Interge.parseShort(str);
9、【数字】转【字符串】
int num = 123;
(1)String str = String.valueOf(num); <——【推荐】
(2)String str = Interge.toString(num);
(3)String str = String.format("%.2f",num); ——>123.00,类似c语言输出一样可以控制格式
----------------------------------------------------------------------------------
共性:其他基本数据类型转为【字符串】时都是: String.valueOf(xxx);
但是StringBulider这种对象或引用数据类型变回String是.toString()
-----------------------------------------------------------------------------------
10、【字符串】转【字符数组】
String str = "123";
char[] fu = str.toCharArray();
11、【字符数组】转【字符串】
char[] fu = {'1','2','3'};
String str = String.valueOf(str);
-----------------------------------------------------------------------------------
【String内部变化的一些方法】
12、【分割字符串】
String str = "Hello World matherfucker";
String[] s = str.split(" ");
for(String i:s){
System.out.println(i); ————> Hello World matherfucker
}
【注意!!!!!】
1、.split()返回的是【字符串数组】
2、括号里填“正则表达式”,然后多个“分隔符”不需要空格隔开
3、多个分隔符一定要带[],因为不带的话计算机会认为“[\\(\\)\\[\\]”这么一大串是“一个”分隔符,而[] 则表示里面的分隔符的【其中任意一个】
4、另外("...",参数)除了填分隔符,还可以填一个参数控制【要分割几份】,比如:
String str = "Hello World matherfucker";
String[] s = str.split(" ",2); ————> 分割成"Hello"和"World matherfucker"
13、【分割完就该组装了,组装字符串】
String s1 = "mather";
String s2 = "fucker";
(1) 方法一:
String S = s1.concat(" ").concat(s2); ————> mather fucker
(2) 方法二:
String S = s1 + " " + s2; ————> mather fucker
【拓字符串新形式:】
(3) 方法三:【StringBuilder方法】
StringBuilder S = new StringBuilder();
S.append("mather");
S.append(" ");
S.append("fucker");
String s = S.toString();
System.out.println(s); ————> mather fucker
(4) 方法四:【StringJoiner方法】
StringJoiner S = new StringJoiner(" ");
S.add("mather");
S.add("fucker");
String s = S.toString();
System.out.println(s); ————> mather fucker
另外,StringJoiner的()里是一个参数时,这个参数代表各个字符串的【中间分隔符】,再加【两个参数】可以代表整个字符串的【开头结尾】
StringJoiner S = new StringJoiner(",","[","]");
S.add("mather");
S.add("fucker");
String s = S.toString();
System.out.println(s); ————> [mather,fucker]
(5) 方法五:【ArrayList<>方法】
ArrayList<String> S = new ArrayList<>();
S.add("mather");
S.add("fucker");
String s = S.toString();
System.out.println(s); ——————> [mather,fucker],因为ArrayList底层做了处理,会用“[]”包裹数据并用“,”分割数据
for(String str : s){
System.out.print(str + " "); ——————> mather fucker,直接输出成员就能避免输出多于符号
}
另外,ArrayList的成员只能是【引用数据类型】或【包装类】
String就是引用数据类型,而所有数字、boolean、byte这些基本数据类型都是【包装类】
ArrayList<Integer> S = new ArrayList<>();
S.add(1);
S.add(2);
for(int i : s){
System.out.print(i + " "); ——————> 1 2
}
14、组装拼接完,就来个大改造,更换内部字符
String str = "HelloFuckingWorld";
str = str.replace("Fucking",""); ——————> HelloWorld
还有.replaceALL()可以彻底大改样,整个字符串改了,而且可以按照正则表达式来改
例子:
String s="abacar";
s = s.replaceAll("a(\\w)a(\\w)a(\\w)",".$1.$2.$3"); ——> 这里$1对应第一个a(\\w)的(\\w),也就是ab的b;$2对应第二个a(\\w)的(\\w),也就是ac的c;$3对应第三个a(\\w)的(\\w),也就是ar的r;然后替换成“.”
System.out.println(s); ————> .b.c.r
15、没啥用的几个方法:【.trim()】、【.toLowerCase()】、【.toUpperCase()】
分别对应:【去除两边空格】、【变小写字母】、【变大写字母】,没啥用不叙述,有脑子的就会用了
=========================================================================