Java String 相关使用

身份证Java正则简单判断:15或18位纯数字,或者17位数字+X或x结尾。(严格时需要验证省份)。

boolean isIdcard = str.matches("(^\\d{15}$)|(^\\d{17}(\\d|X|x)$)");

手机号码Java正则简单判断:1开头,第二位3-9,后面9位数字

boolean isPhone = str.matches("^[1][3-9][0-9]{9}$");

不用看很多, 就说两个个比较有用,但是可能见得不多的String类方法,需要配合正则表达式使用。

1. match()方法:

如 String str = "123456";

我想要判断该字符串是不是全数字

可以用:   str.match("\\d+")  ;  此处可知道结果返回为true。如果不是全为数字就返回为false。

同理用作判断字符串是不是满足邮箱,身份证,是否满足一定格式等。

2. replaceFirst() / replaceAll()方法:

如 String str = "1a23a45a67";

我想拿到字符串中两个字符a之间的内容,也就是中间的23a45

可以用: str.replaceFirst("[^a]*a(.+)a.*","$1");  此时返回的结果即为 23a45。

又比如 String str = "ab123cd";

想到到字符串中的数字,即中间的123,

可以用: str.replaceFirst("\\D*(\\d+)\\D*","$1");  此时返回的结果即为 123。

同理可用该方法拿到字符串中的任意需要的内容。

又比如 String str = "!you good!";

想要去除最初的字符和最后的字符,,

可以用: str.replaceFirst(".(.+).","$1");  此时返回的结果即为 you good

另外String可以配合正则类,做一些其他的处理。只要你想得到,就能做到。

String str = "This is my small example string which I'm going to use for pattern matching.";
Pattern pattern = Pattern.compile("\\w+");	//可加参数 Pattern.CASE_INSENSITIVE 忽略大小写
Matcher matcher = pattern.matcher(str);
StringBuilder sb = new StringBuilder();
// 检查所有的结果
while (matcher.find()) {
	System.out.print("index: " + matcher.start() + "-" + matcher.end() + " ");
	System.out.println(matcher.group());
	sb.append(matcher.group()+"_");
}
System.err.println(sb.toString());

// 现在创建一个新的pattern和Matcher 以用选项卡替换空格s
Pattern replace = Pattern.compile("\\s+");
Matcher matcher2 = replace.matcher(str);
System.out.println(matcher2.replaceAll("\t"));
又比如 String str = "hdsjhf$jks${acd},${cdsa}";    
要取${}中的值,可以用下列正则;

        String str = "hdsjhf$jks${acd},${cdsa}";
        Pattern pattern = Pattern.compile("\\$\\{\\w+\\}");    //可加参数 Pattern.CASE_INSENSITIVE 忽略大小写
        Matcher matcher = pattern.matcher(str);
        StringBuilder sb = new StringBuilder();
        // 检查所有的结果
        while (matcher.find()) {
            System.out.print("index: " + matcher.start() + "-" + matcher.end() + " ");
            System.out.println(matcher.group());
            sb.append(matcher.group()+"_");
        }
        System.err.println(sb.toString());

一、String 类构造方法:


1.  String s = "abc";

2.  String s = new String();   //单纯的String对象。

3.     byte[] b = {65,97,99};    //65='A',97='a',65+25='Z',97+25='z',48='0',48+9='9'
String s = new String(b);    // s = "Aac" ,会根据byte[]中的ASCLL码拿到对应值。
String s = new String(b,0,2);    // s = "Aa",只取b[0]、b[1]。2不包含。可以是int[]


4.     char[] c = {65,'b','c','我'};   // 可以将char[]作为参数. 'a' = (byte)65
        String s = new String(c);     // s = "abc" ,因为65对应为'a'
String s = new String(c,1,2);    // s = "bc",2是包含的。为a[1]、a[2].与byte不同


5. String s = new String(String original);
String s = new String(StringBuffer buffer);
String s = new String(StringBuilder builder);


6. byte[] b = {65,65+32,48};
Charset c = Charset.forName("gbk");  //编码集两种创建方法: = Charset.defaultCharset();
String s = new String(b,c); //输出为 "Aa0"。编码集貌似并没有什么卵用。



二、String 类的相关方法:


String s = "abc123ABC";


1. s.equals(Object obj);  // 直接比较。boolean
2. s.length(); // 返回字符串长度。\r或\n也算一个长度。int
3. s.equalsIgnoreCase(Object obj); //忽略大小写比较。boolean
4. s.substring(0, 3); //截取索引为0-2的字符串,不包括3. String
s.substring(2); //截取索引为2之后的所有字符。 c123ABC。 String
5. s.getBytes(); //返回字符串中每个字符的byte值。如返回的b[0]=97.  byte[]
6. s.charAt(2); //返回索引为2的字符;"c" 。  String
7. s.codePointAt(0); //返回索引为0的字符的ASCLL码。"a" = 97.  int
s.codePointBefore(1)  //返回指定下标之前的一个字符的ASCLL。所以>1。此处97.int
8. s.compareTo("b"); //比较ASCLL。s.ASCII > "b".ASCII ? 正数: 0 or  负数
9. s.concat("000"); //在s的基础上加上"000". String
10. s.contains("xxx"); //是否包含xxx。 boolean
11. s.endswith("xxx"); //是否以xxx结尾。boolean
s.startWith("xxx"); //是否以xxx开头。boolean
12. s.indexOf("b"); //返回"b"在s中第一次出现的下标索引。如此处:1。没有就-1. int
s.indexOf("b",2)  //如果下标2之后没有"b",返回-1.如果有就返回"b"在整个s中的下标。
s.lastIndexOf("a")  //返回s中"a"最后出现时的下标。 没有就返回-1。 int
s.lastIndexOf("a",4) //返回s中下标0-4(包括)中最后一次出现"a"的下标。int
13. s.trim(); //除去字符串s两边的空格。 String
14. s.isEmpty();  //在 s = ""; 的情况下为真返回true。若s=null,会有空指针异常。boolean
15. s.intern(); //"d" == new String("d").intern().若池已经有此字符串,则返回池中的字符串。否则,将此 String 对象添加到池中。 
16. s.matches("regex"); //判断s是否符合正则表达式"regex",符合,返回true。很不错的方法!
17. String s1= “tsinghua” 
String s2=“it is TsingHua”; 
s1.regionMatches(0,s2,6,7); //regionMatches(s1.int,与s2,的6,共比较7个字符)
//最后一个语句表示将s1字符串从第0个字符“t”开始和s2字符串的第6个字符“T”开始逐个比较,共比较7对字符,由于区分大小写,所以结果为false。 
//但如果最后一个语句改为: 
s1.regionMatches(true,0,s2,6,7); //没什么卵用. boolean
//则结果为true,因为入口参数中true表示忽略大小写区别。
18. String.valueOf(obj|char[]);  //将obj转为字符串。如将数值变为字符串。 String
19. s.copyValueOf(char[]|char[],int,int); //将数组转为字符串s。而没有新建对象。
20. s.replace(oldStr,newStr); //将s中的oldStr用newStr代替并返回新字符串。String
21.  s.replaceAll("regex","newStr");  //可以用正则匹配某些字符,然后用newStr替换
        s.replaceAll("(\\w+)regex(\\w+)","$1 $2")  //可以用正则匹配某些字符,然后拿到这些字符。非常有用!谁用谁知道
22. s.replaceFirst("regex","newStr");  //用正则匹配某些字符,然后用newStr替换一次
s.replaceFirst("regex(\\w+)","$1") //用正则匹配某些字符,然后拿到这些字符
23. String.join("_","hello","world"); //用第一个参数'_'将hello与world连接起来。多个都行。String
String.join("_",list); //用左边的'_'将集合中的元素连接起来。 返回String.

 

24.  String.format("the answer:%s", str);//用str代替左边的 %s; 左边%s个数=右边变量个数。

25.  s.split("a"); //返回一个String数组。此处s.split("a")[0]="",..[1]="b",..[2]="c",..[3]="123ABC"

s.split("a|A"); //通过“a”或者"A"切割。

       s.spilt("a",2);  // 只分割成两段。 s.spilt("a",2)[0]="", s.spilt("a",2)[1]="baca123ABC"

 

下面这些一般都不会用到。

 

String.format("结果是:% d", 31);//结果是:& &31   //正值前面加空格。负不加。
String.format("结果是:%3d", 31);//结果是:31& &     //& &代表一个空格
String.format("结果是:%,d", 3100);//结果是:3,100 //,是3位数字多一个逗号
String.format("结果是:%,6d", 3100);//结果是:& &3,100 //不够宽度左边补空格
String.format("结果是:%,-6d", 3100);//结果是:3,100& &  //加-后居左,空格补右
String.format("结果是:%,+-7d", 3100) // +3,100& &  //如果7d前没有-,空格在左边
String.format("结果是:%,07d", 3100) //003,100  //结果用0填充
String.format("结果是:%(d", -31);//结果是:(31)  //负数用括号括起来。不显示-
String.format("结果是:%#o", 31);//结果是:037  //o:8进制,x:16进制 。3*8+7=31
String.format("结果是:%2$3d", 31,41); //结果是:& &41
String.format("结果是:%1$3d%2$ ,d", 3100,4100); //结果是:3100 4,100

 

还有Java String相关的面试题:

Java String类常见面试题1

Java String类常见面试题2

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值