package test0302;
import java.util.Locale;
public class Test1 {
public static void main1(String[] args) {
int a = 10;
//定义了字符串常量s,在栈区为s开辟一块空间
//然后在字符串常量池中分配一块内存空间存储"hello",并将其地址赋值给s
//而"hello"这个字符串将不会再改变
String s = "hello";
//在字符串常量池中为"helloworld"开辟一块空间,并将其地址赋值给s
//事实上,s由"hello"->"helloworld",只是将s的值由"hello"的地址改为"helloworld"的地址
s = "helloworld";
System.out.println(s);
}
public static void main2(String[] args) {
//创建一个空字符串
String str1 = "";
//创建一个字符串"abc"
String str2 = "abc";
//创建一个字符串数组
char[] charArry = new char[] {'A','b','c','d'};
String str3 = new String(charArry);
//创建一个字节数组
byte[] arr = {1,2,3,4,5};
String str4 = new String(arr);
System.out.println("a" + str1 + "b");
System.out.println(str2);
System.out.println(str3);
System.out.println(str4);
char[] str5 = new char[] {'A','B','C','D'};
String str6 = new String(str5);
byte[] arr1 = {1,2,3,4,5,6};
String str7 = new String(arr1);
System.out.println(str5);
System.out.println(str6);
System.out.println(str7);
}
public static void main3(String[] args) {
String s = "ababcdedcba"; //定义字符串
System.out.println("字符串的长度为:" + s.length());
System.out.println("字符串中的第一个字符为:" + s.charAt(0));
System.out.println("字符c第一次出现的位置是:" + s.indexOf('c'));
System.out.println("字符c最后一次出现的位置是:" + s.indexOf('c'));
System.out.println("字符串ab第一次出现的位置是:" + s.lastIndexOf("ab"));
System.out.println("字符串最后一次出现的位置是:" + s.lastIndexOf("ab"));
}
public static void main4(String[] args) {
String s = "abcd";
String str2 = "ABCD";
//将s变成字符数组
char[] str1 = s.toCharArray();
for(int i = 0; i < str1.length; i++){
if(i != str1.length - 1){//如果不是数组的最后一个元素,就把","打印出来
System.out.print(str1[i] + ",");
}
else//如果是最后一个元素,就不用打印","
System.out.println(str1[i]);
}
System.out.println("将int值转换为String类型之后的结果:" + String.valueOf(12));
System.out.println("将字符串转换为大写的结果:" + str2.toUpperCase());//toUpperCase只能被字符串调用,不能被字符数组调用
System.out.println("将字符串转换为小写的结果:" + str2.toLowerCase());//同理
}
public static void main5(String[] args) {
//字符串的替换和去除空格操作
String s = "itcast";
System.out.println("将it转换为cn.it的结果是" + s.replace("it","cn.it"));
String v = " i t c a s t ";
System.out.println("的" + v);
System.out.println("去除两端空格的结果为" + v.trim());
System.out.println(v);
System.out.println("去除字符串中间的空格的结果为" + v.replace(" ",""));
System.out.println(v);
//由此可见,改变的并不是v本身只是将该操作的结果打印出来了
}
public static void main6(String[] args) {
//字符串的判断
String s1 = "String";
String s2 = "string";
System.out.println("判断s1字符串对象是否以Str开头:" + s1.startsWith("Str"));
System.out.println("判断是否以ng结尾的:" + s1.endsWith("ng"));
System.out.println("判断是否包含tri:" + s1.contains("tri"));
System.out.println("判断字符串是否为空:" + s1.isEmpty());
System.out.println("判断s1,s2的内容是否相同:" + s1.equals(s2));
System.out.println("忽略大小写的请况下,s1,s2的内容是否相同:" + s1.equalsIgnoreCase(s2));
System.out.println("按对应字符的Unicode值比较s1,s2的大小:" + s1.compareTo(s2));//返回-32
//比较字符串是否相等时,可以使用equals,也可以使用==,但两者的使用方式是明显不同的:
//equals比较的时两字符串的内容是否相同,==判断的是两边的地址是否相同,如下例:
String str1 = new String("abc");
String str2 = new String("abc");
System.out.println(str1 == str2);//结果是false,因为str1 str2这两个对象的地址不同
System.out.println(str1.equals(str2));//结果是true,因为两个字符串的内容相同
//但如果是这样,结果为true,因为字符串常量池为"abcd"开辟一块空间,这里是将字符串的地址赋值给了str3和str4,因此地址是一样的
String str3 = "abcd";
String str4 = "abcd";
System.out.println(str3 == str4);
}
public static void main(String[] args) {
//字符串的截取和分割操作
String str = "石家庄-武汉-哈尔滨";
//下面是字符串的截取操作
System.out.println("从第5个截取到末尾的结果:" + str.substring(4));
System.out.println("从第5个字符截取到第6个字符的结果:" + str.substring(4,6));
//下面是字符串的分割操作
System.out.print("分割后的字符串数组的元素依次为:");
String[] strArray = str.split("-");//分割字符串并将结果放在数组strArray中
for(int i = 0; i < strArray.length; i++){
//如果不是数组的最后一个元素就加","
if(i != strArray.length - 1){
System.out.print(strArray[i] + ",");
}
else
System.out.println(strArray[i]);
}
}
}