3.5. 字符串截取
若一个字符串包含多个内容但每次只需要字符串的部分内容时,那么可以使用substring()方法来获取字符串中指定的内容(即字符串)。语法如下:
str.substring(str,end)
//str:子字符串在整体字符串中的开始位置
//end:子字符串在整体字符串中的结束位置
例如,字符串“What are you doing”的子字符串"What"的获取方法如下:
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str="What are you doing"; //定义字符串对象
String substr=str.substring(0,4); //从字符串下标0到4的位置截取子字符串 What
System.out.println(substr);
}
}
执行代码显示substr为:What。
3.6. 字符串替换
3.6.1. replace()方法
该方法可以将字符串中的指定字符或字符串替换成新的字符或字符串。语法如下:
str.replace(oldstr,newstr)
//str:原有字符串对象
//oldstr:要替换的子字符或者字符串
//newstr:新的字符或者字符串,用于替换原有字符或者字符串的内容
示例代码如下:
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str="What are you doing";
str=str.replace("doing", "learning");
System.out.println(str);
}
}
其执行的结果显示为:What are you learning。
3.6.2. trim()方法
该方法用来去掉字符串两端的空格。语法如下:
str.trim()
//str:一个字符串对象
3.7. 字符串分割
字符串的split()方法可以按指定的分割字符或字符串,将字符串内容分割并存放到字符串数组中。语法如下:
str.split(regex)
//str:一个字符串对象
//regex:分割字符串的分隔符,也可以使用正则表达式来分割字符串
附:如果字符串中没有统一的分隔符,可以使用“|”定义多个分隔符。
实例1.6:使用split()方法以“;“和”。"分割字符串,代码演示如下:
public class StrSplit {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str="学校名称:中心小学;学校所在城市:中国!联系电话:11223344";
String[] info=null;
info=str.split(";|!"); //通过分隔符号将字符串分割并保存到info数组中
for(int i=0;i<info.length;i++) {
System.out.println(info[i]); //输出字符串数组的每个元素内容
}
}
}
实例1.6执行的结果如下图所示:
说明:作为分割附一定要与字符串中的分隔符(全角或者半角)一致;即如果字符串中诸如“;”、“。”等字符是全角,那么在split()方法中的也一定要是全角字符方可。
4. 格式化字符串
4.1. 常规类型的格式化
4.1.1. format(String format,Object...args)
该方法使用指定的字符串格式和参数生成格式化的新字符串。新字符串始终使用本地语言环境,如当前日期信息在中国语言环境中的表现形式为“2017-10-19”,但在其他国家会有不同的表现形式。
语法如下:
String.format(locale,format,args...)
//locale:指定的语言环境
//format:字符串格式
//args...:字符串格式中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。参数的数目是可变的,可以为0
演示实例1.7代码如下:
public class StrConversion {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str=null;
str=String.format("Hi,%s", "长城"); //格式化字符串
System.out.println(str); //输出字符串变量str的内容
System.out.printf("字母a的大写是:%c%n",'A');//%c:字符类型;%n:换行符
System.out.printf("3>7的结果是:%b %n",3>7);//%b:布尔类型
System.out.printf("100的一半是:%d %n", 100/2);//%d:整数十进制
System.out.printf("100的16进制数是:%x %n", 100);//%x:十六进制整数类型
System.out.printf("100的8进制数是:%o %n", 100);//%o:八进制整数类型
System.out.printf("50元的书打8.5折扣是:%f 元%n", 50*0.85);//%f:浮点类型
System.out.printf("50圆的书打8.5折扣后的16进制数是:%a %n", 50*0.85);//%a:十六进制浮点类型
System.out.printf("42.5的指数和浮点数结果的长度较短的是:%g %n",50*0.85);//%g:通用浮点类型(f和e类型中较短的)
System.out.printf("85的折扣是%d%% %n", 85);//%%:百分比类型
System.out.printf("字母A的散列码是:%h %n", 'A');//%h:散列码
}
}
实例1.7执行结果如下图所示:
实例1.8使用几种常见的转换符组合标志实现字符串的格式化,代码如下:
public class StrFormat {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str=null;
//$使用,被格式化的参数索引
str=String.format("格式参数$的使用:%1$d,%2$s", 168,"abc");
System.out.println(str);
//+使用,为正数或者负数添加符号
System.out.printf("显示正负数的符号:%+d与%d%n", 520,-99);
//补O使用,数字前面补0
System.out.printf("最牛的编号是:%03d%n", 12);
//空格使用,在数字前面添加指定数量的空格
System.out.printf("Tab键的效果是:% 8d%n", 6);
//.使用,以“,”对数字分组
System.out.printf("整数分组的效果是:%,d%n", 123456789);
//空格和小数点后面个数
System.out.printf("一本书的价格是:% 50.5f元%n", 49.8);
}
}
实例1.8执行的结果如下图所示:
4.2. 日期和时间字符串格式化
4.2.1. 常见的日期和时间格式化,其转换符有:c、F、D、r、T、R等。
4.2.2. 格式化日期字符串。
4.2.3. 格式化时间字符串。
实例1.9代码如下:
import java.util.Date;
import java.util.Locale;
public class StrDateTime {
public static void main(String[] args) {
// TODO Auto-generated method stub
Date date= new Date();
//c的使用,包括全部日期和时间信息
System.out.printf("全部日期和时间信息:%tc%n",date);
//F的使用,“年-月-日”格式
System.out.printf("年-月-日格式:%tF%n",date);
//D的使用,“月/日/年”格式
System.out.printf("月/日/年格式:%tD%n",date);
//r的使用,“HH:MM:SS PM格式(12时制)”
System.out.printf("HH:MM:SS PM格式(12时制):%tr%n",date);
//T的使用,“HH:MM:SS格式(24时制)”
System.out.printf("HH:MM:SS格式(24时制):%tT%n",date);
//R的使用,“HH:MM格式(24时制)”
System.out.printf("HH:MM格式(24时制):%tR",date);
String str=String.format(Locale.US,"英文月份简称:%tb",date);
System.out.println(str);
System.out.printf("本地月份简称:%tb%n",date);
//B的使用,月份全称
str=String.format(Locale.US,"英文月份全称:%tB",date);
System.out.println(str);
System.out.printf("本地月份全称:%tB%n",date);
//a的使用,星期简称
str=String.format(Locale.US,"英文星期的简称:%ta",date);
System.out.println(str);
//A的使用,星期全称
System.out.printf("本地星期的简称:%tA%n",date);
//C的使用,年前两位数字(不足两位前面补0)
System.out.printf("年的前两位数字(不足两位前面补0):%tC%n",date);
//y的使用,年的后两位数字(不足两位前面补0)
System.out.printf("年的后两位数字(不足两位前面补0):%ty%n",date);
//j的使用,一年中的天数(即年的第几天)
System.out.printf("一年中的天数(即年的第几天):%tj%n",date);
//m的使用,两位数字的月份(不足两位前面补0)
System.out.printf("两位数字的月份(不足两位前面补0):%tm%n",date);
//d的使用,两位数字的日(不足两位前面补0)
System.out.printf("两位数字的日(不足两位前面补0):%td%n",date);
//e的使用,月份的日(前面不补0)
System.out.printf("月份的日(前面不补0):%te",date);
//H的使用,2位数字24时制的小时(不足2位前面补0)
System.out.printf("2位数字24时制的小时(不足2位前面补0):%tH%n", date);
//I的使用,2位数字12时制的小时(不足2位前面补0)
System.out.printf("2位数字12时制的小时(不足2位前面补0):%tI%n", date);
//k的使用,2位数字24时制的小时(前面不补0)
System.out.printf("2位数字24时制的小时(前面不补0):%tk%n", date);
//l的使用,2位数字12时制的小时(前面不补0)
System.out.printf("2位数字12时制的小时(前面不补0):%tl%n", date);
//M的使用,2位数字的分钟(不足2位前面补0)
System.out.printf("2位数字的分钟(不足2位前面补0):%tM%n", date);
//S的使用,2位数字的秒(不足2位前面补0)
System.out.printf("2位数字的秒(不足2位前面补0):%tS%n", date);
//L的使用,3位数字的毫秒(不足3位前面补0)
System.out.printf("3位数字的毫秒(不足3位前面补0):%tL%n", date);
//N的使用,9位数字的毫秒数(不足9位前面补0)
System.out.printf("9位数字的毫秒数(不足9位前面补0):%tN%n", date);
//p的使用,小写字母的上午或下午标记(英)
String str2 = String.format(Locale.US, "小写字母的上午或下午标记(英):%tp", date);
System.out.println(str2);
System.out.printf("小写字母的上午或下午标记(中):%tp%n", date);
//z的使用,相对于GMT的RFC822时区的偏移量:%tz%n
System.out.printf("相对于GMT的RFC822时区的偏移量:%tz%n", date);
//Z的使用,时区缩写字符串:%tZ%n
System.out.printf("时区缩写字符串:%tZ%n", date);
//s的使用,2017-10-19 00:00:00 到现在所经过的秒数
System.out.printf("2017-10-19 00:00:00 到现在所经过的秒数:%ts%n", date);
//Q的使用,2017-10-19 00:00:00 到现在所经过的毫秒数
System.out.printf("2017-10-19 00:00:00 到现在所经过的毫秒数:%tQ%n", date);
}
}
实例1.9执行的结果如下图所示: