开始讲解之前,先列出本章的提纲,如下图所示:
string str;
string str1 = new string("student"); system.out.println(str1); char a[] = {'s', 't', 'u', 'd', 'e', 'n', 't'}; string str2 = new string(a); system.out.println(str2); char b[] = {'s', 't', 'u', 'd', 'e', 'n', 't'}; string str3 = new string(b, 2, 4); system.out.println(str3); // 字符串常量 string str4 = "we are students"; string str5 = "we are students"; system.out.println(str4 == str5); // str4与str5引用相同的内存地址
输出结果如下图所示:
string str1 = new string("hello"); string str2 = new string("world"); string str = str1 + " " + str2; system.out.println(str); // 输出hello world
注意事项:java中一句相连的字符串不能分开在两行中写,如下图所示
可以看出,这种写法是错误,无法编译通过,如果一个字符串过长,为了便于阅读,想将这个字符串分在两行上书写,此时可以使用“+”将两个字符串连接起来,之后在加号处换行,如下面语句所示:
system.out.println("i like " + "java");
int booktime = 4; float practice = 2.5f; system.out.println("我每天花费" + booktime + "小时看书;" + practice + "小时上机练习");
输出结果如下图所示:
string str = "we are students"; int size = str.length(); system.out.println(size); // 输出15
indexof():返回搜索的字符或者字符串在字符串中首次出现的位置,如果没有检索到,则返回-1。
lastindexof():返回搜索的字符或者字符串在字符串中最后一次出现的位置,如果没有检索到,则返回-1。
string str = "we are students"; int size = str.indexof("a"); system.out.println(size); // 输出3 size = str.indexof("o"); system.out.println(size); // 输出-1 size = str.indexof(""); system.out.println(size); // 输出0
string str = "we are students"; int size = str.lastindexof("s"); system.out.println(size); // 输出14 size = str.lastindexof("o"); system.out.println(size); // 输出-1 size = str.lastindexof(""); system.out.println(size); // 输出15
注意事项:如果lastindexof()方法中的参数是空字符串""(注意没有空格),则返回的结果与调用该字符串的length()方法的返回结果相同。
string str = "hello world"; char mychar = str.charat(6); system.out.println("字符串str中索引位置是6的字符为:" + mychar);
输出结果如下图所示:
string str = "hello world"; string substr = str.substring(3); // lo world system.out.println(substr); substr = str.substring(0, 3); system.out.println(substr); // hel,不包括endindex
注意事项:在字符串中空格占用一个索引位置。
string str = " java class "; system.out.println("字符串原来的长度:" + str.length()); // 去掉str的前导和尾部的空格 system.out.println("去掉空格后的长度:" + str.trim().length());
输出结果如下图所示:
string str = "address"; string newstr = str.replace("a", "a"); system.out.println(newstr); // 输出address
说明:
1.如果要替换的字符在字符串中没有出现,则将原字符串返回
2.如果要替换的字符在字符串中重复出现多次,会将要替换的字符全部替换为新字符
3.要替换的字符的大小写要与原字符串中字符的大小写保持一致,否则不能成功的替换
string str = "address"; string newstr = str.replace("b", "b"); system.out.println(newstr); // 输出address newstr = str.replace("d", "d"); system.out.println(newstr); // 输出address newstr = str.replace("a", "b"); system.out.println(newstr); // 输出address
string num1 = "22045612"; string num2 = "21304578"; boolean b1 = num1.startswith("22"); boolean b2 = num1.endswith("78"); boolean b3 = num2.startswith("22"); boolean b4 = num2.endswith("78"); system.out.println("字符串num1是以'22'开始的吗?" + b1); system.out.println("字符串num1是以'78'结束的吗?" + b2); system.out.println("字符串num2是以'22'开始的吗?" + b3); system.out.println("字符串num2是以'78'结束的吗?" + b4);
输出结果如下图所示:
对字符串对象进行比较不能简单地使用比较运算符"==",因为比较运算符比较的是两个字符串的地址是否相同。即使两个字符串的内容相同,两个对象的内存地址也可能是不同的,使用比较运算符仍然会返回false。
因此,要比较两个字符串内容是否相等,应使用equals()方法和equalsignorecase()方法。
string s1 = new string("abc"); string s2 = new string("abc"); string s3 = new string("abc"); string s4 = "abc"; string s5 = "abc"; boolean b1 = s1.equals(s2); boolean b2 = s1.equalsignorecase(s2); boolean b3 = s1.equals(s3); boolean b4 = s1 == s3; boolean b5 = s4 == s5; system.out.println(s1 + " equals " + s2 + ":" + b1); system.out.println(s1 + " equalsignorecase " + s2 + ":" + b2); system.out.println(s1 + " equals " + s3 + ":" + b3); system.out.println(s1 + " == " + s3 + ":" + b4); system.out.println(s4 + " == " + s5 + ":" + b5);
输出结果如下图所示:
compareto()方法为按字典顺序比较两个字符串,该比较基于字符串中各个字符的unicode值,按字典顺序将此string对象表示的字符序列与参数字符串所表示的字符序列进行比较。
如果按字典顺序此string对象位于参数字符串之前,则比较结果为一个负整数。
如果按字典顺序此string对象位于参数字符串之后,则比较结果为一个正整数。
如果这两个字符串相等,则比较结果为0。
string str = new string("b"); string str2 = new string("a"); string str3 = new string("c"); string str4 = new string("b"); system.out.println(str + " compareto " + str2 + ":" + str.compareto(str2)); system.out.println(str + " compareto " + str3 + ":" + str.compareto(str3)); system.out.println(str + " compareto " + str4 + ":" + str.compareto(str4));
输出结果如下图所示:
说明:compareto()方法只有在equals(object)方法返回true时才返回0。
string str = new string("abc def"); string newstr = str.tolowercase(); string newstr2 = str.touppercase(); system.out.println(newstr); // abc def system.out.println(newstr2); // abc def
说明:使用tolowercase()方法和touppercase()方法进行大小写转换时,数字或非字符不受影响。
string str = "192.168.0.1"; string[] firstarray = str.split("\\."); string[] secondarray = str.split("\\.", 2); system.out.println("str的原值为:[" + str + "]"); system.out.println("全部分割的结果:"); for (string a : firstarray) { system.out.print("[" + a + "]"); } system.out.println(); system.out.println("分割两次的结果:"); for (string a : secondarray) { system.out.print("[" + a + "]"); } system.out.println();
输出结果如下图所示:
date date = new date(); string year = string.format("%ty", date); string month = string.format("%tb", date); string day = string.format("%td", date); string hour = string.format("%th", date); string minute = string.format("%tm", date); string second = string.format("%ts", date); string form = string.format("%tf", date); system.out.println("今年是:" + year + "年"); system.out.println("现在是:" + month); system.out.println("今天是:" + day + "号"); system.out.println("现在是:" + hour + "时" + minute + "分" + second + "秒"); system.out.println("年-月-日格式:" + form);
输出结果如下图所示:
string str = string.format("%d", 400 / 2); string str2 = string.format("%b", 3 > 5); string str3 = string.format("%x", 200); system.out.println("400的一半是:" + str); system.out.println("3 > 5正确吗:" + str2); system.out.println("200的十六进制数是:" + str3);
输出结果如下图所示:
正则表达式通常被用于判断语句中,用来检查某一字符串是否满足某一格式,正则表达式是含有一些具有特殊意义字符的字符串,这些特殊字符称为正则表达式的元字符。
以下表格为常用的元字符:
元字符 | 正则表达式中的写法 | 意义 |
. | . | 代表任意一个字符 |
\d | \\d | 代表0~9的任何一个数字 |
\d | \\d | 代表任何一个非数字字符 |
\s | \\s | 代表空白字符,如'\t','\n' |
\s | \\s | 代表非空白字符 |
\w | \\w | 代表可用作标识符的字符,但不包括"$" |
\w | \\w | 代表不可用于标识符的字符 |
\p{lower} | \\p{lower} | 代表小写字母a~z |
\p{upper} | \\p{upper} | 代表大写字母a~z |
\p{ascii} | \\p{ascii} | ascii字符 |
\p{digit} | \\p{digit} | 十进制数字,即0~9 |
\p{blank} | \\p{blank} | 空格或制表符\t |
说明:在正则表达式中"."代表任何一个字符,因此在正则表达式中如果想使用普通意义的点字符".",必须使用转义字符"\" 。
在正则表达式中可以使用方括号括起若干个字符来表示一个元字符,该元字符可代表方括号中的任何一个字符。
例如,[abc]4,字符串a4,b4,c4都是匹配的字符串。方括号元字符还可以为其他格式,如:
[^456]:代表4、5、6之外的任何字符。
[a-r]:代表a~r中的任何一个字母。
[a-za-z]:代表任意一个英文字母。
在正则表达式中,允许使用限定修饰符来限定元字符出现的次数。
限定修饰符的用法如下表所示:
限定修饰符 | 意义 | 示例 |
? | 0次或1次 | a? |
* | 0次或多次 | a* |
+ | 1次或多次 | a+ |
{n} | 正好出现n次 | a{2} |
{n,} | 至少出现n次 | a{3,} |
{n,m} | 出现n~m次 | a{2,6} |
string regex = "\\w+@\\w+(\\.\\w{2,3})*\\.\\w{2,3}"; string str1 = "aaa@"; string str2 = "aaaaa"; string str3 = "1111@111ffyu.dfg.com"; if (str1.matches(regex)) { system.out.println(str1 + "是一个合法的e-mail地址格式"); } if (str2.matches(regex)) { system.out.println(str2 + "是一个合法的e-mail地址格式"); } if (str3.matches(regex)) { system.out.println(str3 + "是一个合法的e-mail地址格式"); }
运行结果如下图所示:
string str = ""; long starttime = system.currenttimemillis(); for (int i = 0; i < 10000; i++) { str = str + i; } long endtime = system.currenttimemillis(); long time = endtime - starttime; system.out.println("string消耗时间:" + time); stringbuilder builder = new stringbuilder(""); starttime = system.currenttimemillis(); for (int j = 0; j < 10000; j++) { builder.append(j); } endtime = system.currenttimemillis(); time = endtime - starttime; system.out.println("stringbuilder消耗时间:" + time);
运行结果如下图所示:
通过运行的耗时可以看出,如果在程序中需要频繁的附加字符串,建议使用stringbuilder。
stringbuilder bf = new stringbuilder("hello"); bf.insert(5, "world"); system.out.println(bf.tostring()); // 输出helloworld bf = new stringbuilder("stringbuilder"); bf.delete(5, 10); system.out.println(bf.tostring()); // 输出strinder
如对本文有疑问, 点击进行留言回复!!
Android 4.0使用Kotlin调用C语言以及汇编语言
Java Class.forName()用法和newInstance()方法原理解析
网友评论