当前位置: 移动技术网 > IT编程>开发语言>Java > Java 从入门到精通(第4版)第5章 字符串

Java 从入门到精通(第4版)第5章 字符串

2018年12月08日  | 移动技术网IT编程  | 我要评论

开始讲解之前,先列出本章的提纲,如下图所示:

5.1 string类

5.1.1 声明字符串

string str;

5.1.2 创建字符串

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引用相同的内存地址

 输出结果如下图所示:

5.2 连接字符串

5.2.1 连接多个字符串

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");

5.2.2 连接其他数据类型

int booktime = 4;
float practice = 2.5f;
system.out.println("我每天花费" + booktime + "小时看书;" + practice + "小时上机练习");

 输出结果如下图所示:

5.3 获取字符串信息

5.3.1 获取字符串长度

string str = "we are students";
int size = str.length();

system.out.println(size);   // 输出15

5.3.2 字符串查找

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()方法的返回结果相同。

5.3.3 获取指定索引位置的字符

string str = "hello world";
char mychar = str.charat(6);
system.out.println("字符串str中索引位置是6的字符为:" + mychar);

输出结果如下图所示:

 

5.4 字符串操作

5.4.1 获取子字符串

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

 注意事项:在字符串中空格占用一个索引位置。

5.4.2 去除空格

string str = "  java  class   ";
system.out.println("字符串原来的长度:" + str.length());
// 去掉str的前导和尾部的空格
system.out.println("去掉空格后的长度:" + str.trim().length());

输出结果如下图所示:

5.4.3 字符串替换

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

5.4.4 判断字符串的开始与结尾

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);

输出结果如下图所示:

5.4.5 判断字符串是否相等

对字符串对象进行比较不能简单地使用比较运算符"==",因为比较运算符比较的是两个字符串的地址是否相同。即使两个字符串的内容相同,两个对象的内存地址也可能是不同的,使用比较运算符仍然会返回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);

输出结果如下图所示:

5.4.6 按字典顺序比较两个字符串

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。

5.4.7 字母大小写转换

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()方法进行大小写转换时,数字或非字符不受影响。

5.4.8 字符串分割

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();

 输出结果如下图所示:

5.5 格式化字符串

5.5.1 日期和时间字符串格式化

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);

输出结果如下图所示:

5.5.2 常规类型格式化 

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);

 输出结果如下图所示:

5.6 使用正则表达式

正则表达式通常被用于判断语句中,用来检查某一字符串是否满足某一格式,正则表达式是含有一些具有特殊意义字符的字符串,这些特殊字符称为正则表达式的元字符

以下表格为常用的元字符:

元字符 正则表达式中的写法 意义
. . 代表任意一个字符
\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地址格式");
}

 运行结果如下图所示:

5.7 字符串生成器

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网