String小结

付费节点推荐


免费节点


节点使用教程


不可变String

String对象是不可变的,修改String对象内容实际上是创建了一个全新的String对象。

package cn.bcoder.String_Demo;

public class StringImmutable {
public static String upcase(String s){
return s.toUpperCase(); //返回s的大写
}
public static void main(String[] args) {
String q="howdy";
System.out.println(q);
String Q=upcase(q);
System.out.println(Q);
System.out.println(q); //当把q传递给upcase时,实际上传递的是引用的一个拷贝,而最初的String对象没有变。

}

}

重载“+”与StringBuilder

用于String的“+”和“+=”是java中仅有的两个重载过的运算符,而java并不允许程序员重载任何运算符。

使用“+”可以用来连接String

package cn.bcoder.String_Demo;
/**
* (1)String对象可以重载+运算符
* (2)编译器工作方式是:创建一个StringBuilder对象,用以构建最终的String,
* 并为每个字字符串调用一次StringBulider的append()方法。最后调用toString()生成结果
* @author wangzheng
*
*/

public class String_StringBuilder {

public static void main(String[] args) {
String bcoder="bcoder";
String s="www."+bcoder+".cn";
System.out.println(s);

}

}

使用StringBuilder更为高效

如果程序对附加字符串的需求很频繁,不建议使用+来进行字符串的串联。可以考虑使用java.lang.StringBuilder 类,如果有频繁作字符串附加的需求,使用StringBuilder 类能使效率大大提高。

package cn.bcoder.String_Demo;
public class String_StringBuilder2 {
public static void main(String args[]){
long begin;
long end;
begin=System.currentTimeMillis();
String s="";
for(int i=0;i<10000;i++)
{
s=s+i;
}
end=System.currentTimeMillis();
System.out.println(end-begin); //641ms

begin=System.currentTimeMillis();
StringBuilder sb=new StringBuilder();
for(int i=0;i<10000;i++)
{
sb.append(String.valueOf(i));
}
end=System.currentTimeMillis();
System.out.println(end-begin); //5ms

begin=System.currentTimeMillis();
StringBuffer sber=new StringBuffer(); //线程安全
for(int i=0;i<10000;i++)
{
sber.append(String.valueOf(i));
}
end=System.currentTimeMillis();
System.out.println(end-begin); //4ms

}
}

String常用方法示例

package cn.bcoder.String_Demo;

public class String_Usage {

public static void main(String[] args) {
String s=new String(); //构造方法
String s1=new String("bcoder"); //构造方法
System.out.println(s1.length());
System.out.println(s1.charAt(4));
byte []bytes=s1.getBytes(); //辅助bytes到一个数组中
char []c=s1.toCharArray(); //生成一个char [],包含String内容
System.out.println(s1.equals(s));
System.out.println(s1.compareTo("bd"));
System.out.println(s1.contains("coder")); //String对象是否包含此内容
System.out.println(s1.equalsIgnoreCase("BCODER")); //true,忽略大小写
System.out.println(s1.startsWith("coder")); //是否为此参数的起始
System.out.println(s1.endsWith("coder")); //是否是此参数的后缀
System.out.println(s1.indexOf("c")); //返回此参数的索引(编译器从前往后查找)
System.out.println(s1.lastIndexOf("c")); //同理(编译器从后往前查找)
System.out.println(s1.substring(2)); //返回一个新的字符串从索引为2位置开始
System.out.println(s1.concat(".cn")); //返回新的字符串,并连接了参数String
System.out.println(s1.replace('b', 'a')); //字符串替换(参数为char)
System.out.println(s1.replaceAll("a", "B")); //字符串替换(参数为String),忽略大小写
System.out.println(s1.toLowerCase()); //返回字符串的小写
System.out.println(s1.toUpperCase()); //大写
System.out.println(s1.trim()); //将字符串两端空白字符删除,返回新的字符串。
double pi=3.1415926;
System.out.println(s1.valueOf(pi)); //返回 double 参数的字符串表示形式。(参数支持char [],int,double...)

}

}

从此例可以看出,当需要改变字符串的内容时,String类的方法都会返回一个新的String对象。同时,如果内容没有变化,String的方法只是返回指向原对象的引用而已。

正则表达式

Java中字符串的操作(String,StringBuffer,StringTokenizer),与正则表达式相比,他们只能提供简单的功能。

正则表达式是一种强大而灵活的文本处理工具,使用正则表达式,我们能够以编程的方式,构造复杂的文本模式,并对输入的字符串进行搜索。一旦找到了匹配这些模式的部分,你就能够随心所欲地对他们进行处理。

比如,要找一个数字,他可能有一个负号在最前面,那你就写一个负号和一个问号

-?

要描述一个整数使用“\\d”来表示一位数字,再使用“+”号来表示一个或多个\\d,如下

\\d+

String类还自带了一个非常有用的正则表达式工具——split()方法,其功能是“将字符串从正则表达式匹配的地方切开”

package cn.bcoder.String_Demo;

import java.util.Arrays;
/**
* 分隔单词
* @author wangzheng
*
*/
public class String_Split {
public static String str="To the world you may be one person,,, 冰封 but to one person you may be the world....";
public static void splitting(String regex){
System.out.println(Arrays.toString(str.split(regex)));
}

public static void main(String[] args) {
splitting(" "); //空格
splitting("\\W+"); //一个或多个非单词字符

}

}

运行如下:

[To, the, world, you, may, be, one, person,,,, 冰封, , , , but, to, one, person, you, may, be, the, world....]
[To, the, world, you, may, be, one, person, but, to, one, person, you, may, be, the, world]

String类自带最后一个正则表达式工具是“替换”,你可以只替换正则表达式第一个匹配的子串,或是替换所有匹配的地方。

package cn.bcoder.String_Demo;

public class String_Replacing {
static String s=String_Split.str;
public static void main(String[] args) {

System.out.println("原始字符串:"+s);
System.out.println(s.replaceFirst("p\\w+", "people")); //匹配字母p开头,后面跟一个或多个字母
System.out.println(s.replaceAll("To|the|world", "**")); //匹配To,the,world
}

}
运行结果:

原始字符串:To the world you may be one person,,, 冰封 but to one person you may be the world....
To the world you may be one people,,, 冰封 but to one person you may be the world....
** ** ** you may be one person,,, 冰封 but to one person you may be ** **....

创建正则表达式

正则表达式的完整构造子列表可以参考 java.util.regex包中的Pattern类。

字符
B 指定字符B
 \t  制表符Tab
 \n 换行符
 \r 回车
 \f 换页
 \e 转义

 

字符类
. 任意字符
[abc] 包含a,b和c的任何字符(和 a|b|c 作用相同)
 [^abc] 除了a,b和c之外的任何字符(否定)
 [a-zA-Z] 从a到z或从A-Z的任何字符(范围)
 [abc[hij]] 任意a,b,c,h,i,j字符(与a|b|c|h|i|j 作用相同)(合并)
 [a-z&&[hij]] 任意h,i或j(交)
 \s 空白符(空格,tab,换行,换页,和回车)
 \S 非空白符([^\s])
 \d 数字[0~9]
 \D 非数字[^0~9]
 \w 词字符[a-zA-Z0-9]
 \W 非词符 [^\w]

 

量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
 X{n} X,恰好 n 次
X{n,} X,至少 n 次
 X{n,m} X,至少 n 次,但是不超过 m 次

更多使用方法请参考JDK文档(http://tool.oschina.net/apidocs/apidoc?api=jdk-zh)下的java.util.regex包中的Pattern类。

 

未经允许不得转载:Bcoder资源网 » String小结

相关推荐

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册