String 数据类型

        从概念上来讲,Java字符串就是Unicode字符序列。Java没有内置的字符串类型,而是在标准Java类库的一个实例。

String str = "0123456789";

一、拼接

与绝大部分程序设计语言一样,java语言允许使用+连接两个字符串。例如

Stringstr = "0123456789";
Stringstr1 = "111213";
System.out.println(str+ str1);                                     //0123456789111213 

二、子串

String类的substring方法可以从一个较大的字符串中提取一个子串。例如

String str ="0123456789";
System.out.println(str.substring(2, 6));  //2345

三、检测字符串是否相等

检测字符串是否相等,因为String的特性,我们可以使用==来比较是否相等,但是因为某种原因,我们尽量使用equals方法,具体如下。

Stringstr2 = "111213";
String str3 = str1;
//两者都输出true,因为String类的特殊,编译器可以让String共享,咱么可以想象成各种
//字符串存在在公共的存储池中。两者指向同一内存地址,所以为true。
System.out.println(str1 ==str2);
System.out.println(str1 ==str3);
/*
 * 注意:以后需要比较的时候尽量还是使用equals,因为使用==可能会造成糟糕的bug。
*/
System.out.println("1".equals(str3));

四、空串和Null串

空串是“”,长度为0的串,他是一个Java对象,有自己的长度和内容,而Null串,他没有长度也没有内容,所以判断字符串是否为空时,尽量应该这么操作。

Stringstr5 = "";
String str6 = null;
//两者的区别是前者在堆里有空间,后者没空间
/*
* 注意,判断字符串是否为空时,必须严格按照顺序,否则会因为字符串为空造成空指针的异常。
*/
System.out.println(str!= null && str.length() != 0);

五、 其他的常用方法举例

    int compareTo(String anotherString) : 按照字典顺序,如果字符串位于other之前,返回一个负数,在other后边,返回一个正数,相等则返回0

    boolean equals(Object anObject) :如果字符串与anObject相等,返回true

    boolean equalsIgnoreCase(String anotherString):如果字符串与anObject相等(忽略大

小写),返回true

    int indexOf(String str)

    int indexOf(String strint formIndex)

  返回与字符串str匹配的第一个子串的开始位置。这个位置从0开始。如果不存在str,返回-1

    Int length() :返回字符串的长度

    String replace(CharSequence oldString,CharSequence newString):返回一个新字符串。这个字符串用newString代替字符串中所有的oldString

    String toLoweCase() : 返回一个新字符串,将原始字符串大写改成小写

    String toUppercase():返回一个新字符串,将原始字符串小写改成大写

    String trim() :返回一个新字符串,他删除了原始字符串的头部和尾部。

    实例和输出如下:

package qcby;

public class String2 {
	public static void main(String[] args) {
		String str1 = "0123456789";
		String str2 = "HIJKLMN";
		String str3 = "abcdefg";
		String str4 = "   OP   Q   R  ST  " ;
		System.out.println("str1:" + str1);
		System.out.println("str2:" + str2);
		System.out.println("str3:" + str3);
		System.out.println("str4:" + str4);
		System.out.println("-------------");
		//compareTo
		System.out.print("1112.compareTo(str1):");
		System.out.println("1112".compareTo(str1));
		//equals
		System.out.print("0123456789.equals(str1):");
		System.out.println("0123456789".equals(str1));
		//equalsIgnoreCase
		System.out.print("ABCDEFG.equalsIgnoreCase(str2):");
		System.out.println("ABCDEFG".equalsIgnoreCase(str2));
		//indexOf
		System.out.print("str1.indexOf(\"45\"):");
		System.out.println(str1.indexOf("45"));
		System.out.print("str1.indexOf(\"0\", 2):");
		System.out.println(str1.indexOf("0", 2));
		//length()
		System.out.print("str2.length():");
		System.out.println(str2.length());
		//replace
		System.out.print("str1.replace(\"4\", \"5\"):");
		System.out.println(str1.replace("4", "5"));
		//toUpperCase
		System.out.print("str3.toUpperCase():");
		System.out.println(str3.toUpperCase());
		//toLowerCase
		System.out.print("str2.toLowerCase():");
		System.out.println(str2.toLowerCase());
		//trim
		System.out.print("str4.trim():");
		System.out.println(str4.trim());
		
	}

}
输出结果为:
str1:0123456789
str2:HIJKLMN
str3:abcdefg
str4:   OP   Q   R  ST  
-------------
1112.compareTo(str1):1
0123456789.equals(str1):true
ABCDEFG.equalsIgnoreCase(str2):false
str1.indexOf("45"):4
str1.indexOf("0", 2):-1
str2.length():7
str1.replace("4", "5"):0123556789
str3.toUpperCase():ABCDEFG
str2.toLowerCase():hijklmn
str4.trim():OP   Q   R  ST

六、 构建字符串

   有些时候,需要有较短的字符串构建字符串,例如,按键或来自文件中的单词,采用字符串连接的方式达到此目的的效率较低。每次连接字符串,都会生成一个String对象,既耗时又浪费空间。所以使用StringBuilder类可以避免这个问题的发生。例如:

StringBuilder str7 = new StringBuilder();
str7.append("1111111111");
str7.append(true);   //true也可以换成true.toString();
System.out.println(str7);
str7.setCharAt(1, 'a');
System.out.println(str7);
System.out.println(str7.insert(2, "==="));
    输出结果为:
1111111111true
1a11111111true
1a===11111111true

七、 输入输出

    1. 格式化输出

    我们可以使用printf来输出,用format来做字符串输出,具体如下:

    System.out.printf("12%d45%d789", 3,6);

    123456789

                                                            用于printf的转换符如下

转换说明符 输出
%a 浮点数、十六进制数字和p-记数法(C99)
%A 浮点数、十六进制数字和p-记数法(C99)
%c 一个字符
%d 有符号十进制整数
%e 浮点数、e-记数法
%E 浮点数、E-记数法
%f 浮点数、十进制记数法
%g 根据数值不同自动选择%f或者%e。%e格式在指数小于-4或者大于等于精度时使用
%G 根据数值不同自动选择%f或者%E。%E格式在指数小于-4或者大于等于精度时使用
%i 有符号十进制整数(与%d相同)
%o 无符号八进制整数
%p 指针(就是指地址)
%s 字符串
%u 无符号十进制整数
%x 使用十六进制数字0f的无符号十六进制整数
%X 使用十六进制数字0F的无符号十六进制整数
%% 打印一个百分号

这个最重要的应用就是用来打印时间。具体几个例子:

System.out.print("完整时间:");
System.out.printf("%tc",new Date());
System.out.println();
		
System.out.print("24小时间:");
System.out.printf("%tT",new Date());
System.out.println();
		
System.out.print("月的完整拼写:");
System.out.printf("%tB",new Date());
System.out.println();
		
System.out.print("时区:");
System.out.printf("%tZ",new Date());
完整时间:星期日 七月 08 18:26:32 CST 2018
24小时间:18:26:32
月的完整拼写:七月
时区:CST
这个是对应的表:

转换符 类型 举例
c 完整的日期和时间 Mon Feb 09 18:05:11 PST 2004
F ISO 8061日期 2004-02-09
D 美国格式的日期 02/09/2004
T 24小时时间 18:03:23
r 12小时时间 05:03:23 pm
R 24小时时间没有秒 18:05
Y 4位数字的年(前面补0) 2004
y 年的后两位数字(前面补0) 04
C 年的前两位数字(前面补0) 20
B 月的完整拼写 February
b或h 月的缩写 Feb
m 两位数字的月(前面补0) 02
d 两位数字的日(前面补0) 09
e 两位数字的月(前面不补0) 9
A 星期几的完整拼写 Monday
a 星期几的缩写 Mon
j 三位数的年中的日子(前面补0),在001到366之间 069
H 两位数字的小时(前面补0)。在0到23之间 18
k 两位数字的小时(前面不补0)在0到23之间 8
I(大写的i) 两位数字的小时(前面补0)。在0到12之间 06
l(小写的L) 两位数字的小时(前面不补0),在0到12之间 6
M 两位数字的分钟(前面补0) 05
S 两位数字的秒(前面补0) 19
L 三位数字的毫秒(前面补0) 047
N 九位数字的毫微秒(前面补0) 047000000
P 上午或者下午的大写标志 PM
p 上午或者下午的小写标志 pm
z 从GMT起。RFC822数字移位 -0800
Z 时区 PST
s 从格林威治时间1970-01-01 00:00:00起的秒数 107884319
Q 从格林威治时间1970-01-01 00:00:01起的毫秒数 107884319047

猜你喜欢

转载自blog.csdn.net/qq_36186690/article/details/80960845