常用的创建放到hi
// 方式一 String str = “Hello”; // 方式二 String str2 = new String(“Hello”); // 方式三 char[] array = {‘a’, ‘b’, ‘c’}; String str3 = new String(array);
在实际开发中,String创建一个对象,可以以下的格式
String str = new String(“Hello”);
但这种格式需要再重新开辟一个空间,如果想节省空间,可以使用到intern()方法
public static void main1(String[] args) {
String str1 = "Hello";//最主要的方式
String str = new String("Hello").intern();
System.out.println(str.equals(str1));
}
通过intern()方法可以重复利用池中的对象,不需要重新申请一个空间,再次执行intern()方法,此时就会再池中查找内容相同的字符常量,如果在池中没有找到,就把当前字符串加到池中,如果已经找到了就返回这个池中的对象,节省了空间(但实际开发中很少遇到)
想要怕段两个字符串是否相等,用==是有它的风险的,就例如:
String str1 = "Hello";
String str2 = "Hello";
System.out.println(str1 == str2);
// 执行结果
true
以上创建字符串的方式似乎对运行结果没有产生什么影响,但是如果深究其内涵,了解到str1和str2所指向的对象相同(类似于C语言的指针),指向同一个对象,判断相等当然会返回true。
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1 == str2);
// 执行结果
false
但是用这种创建方式,可以看到结果并不符合预期,是因为两个新创建的对象指向不同的内存
因此,如果相比较两个字符串是否相等,需要用到equal()方法。
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1.equals(str2));
System.out.println("Hello".equals(str1));
// System.out.println(str2.equals(str1)); // 或者这样写也行
// 执行结果
true
true
如果想要修改字符串,需要用到这个方法。例如, 现有字符串 str = “Hello” , 想改成 str = “hello”
String str = "Hello";
str = "h" + str.substring(1);
System.out.println(str);
// 执行结果
hello
//字符串=》字符数组
String str = "hehe";
//toCharArray()是把string中包含的字符数组拷贝过来
char[] data = str.toCharArray();
//字符数组=》字符串
//借助String的构造方法即可
char[] array = {'z','v','v'};
String str2 = new String(array);
System.out.println(str);
//字符串转字节数组
String str = "hello";
byte[] array = str.getBytes();;
//字节数组转字符串
String str2 = new String(array);
System.out.println(str2);
使用 comperaTo可以比较字符串大小
compareTo 返回值 >0时,认为str1比str2大 compareTo 返回值 <0时,认为str1比str2小 compareTo 返回值 ==0时,认为str1与str2相等(内容)
public static void main6(String[] args) {
//比较字符串大小
String str1 = "hehe";
String str2 = "haha";
System.out.println(str1.compareTo(str2));
}
忽略大小写的比较方法:
//忽略大小写
String str1 = "hehe";
String str2 = "Haha";
System.out.println(str1.equalsIgnoreCase(str2));//忽略大小写比较
public static void main(String[] args) {
//判定字符串字串
String str1 = "hello world";
String str2 = "wor";
System.out.println(str1.contains(str2));
//不光能判断是否为字串,还能确定字串所处的位置
System.out.println(str1.indexOf(str2));
//返回-1表示str1不包含str2
//返回结果是str2再str1中第一次出现的下标
}
public static void main(String[] args) {
String str = "I Live In The Home";
String[] ret = str.split(" ");
for (String x : ret){
System.out.println(x);
}
System.out.println("原来的字符串为:" + str);
//System.out.println(Arrays.toString(ret));
}
输出结果为:
从这里可以看到,本代码是用空格拆分字符串,但是最开始的字符串不会因为字符串的分割而改变(String定义的字符串不会被修改)
注意: 这里要引出一个概念:正则表达式
public static void main(String[] args) {
String str = "192.43.67";
//想按照“.”来切分
String[] result = str.split(".");
for (String x : result){
System.out.println(x);
}
}
以上代码没有执行结果,也就是说split方法在str里面没有找到"."这个字符,我们知道,“.”在正则表达式中是一个特殊字符 ,需要进行转义才能识别出来。如下:
String str = "192.43.67";
//想按照“.”来切分
//.在正则表达式中是一种特殊符号,为了让split识别出源字符串中的“.”,就需要进行转意义“\\.”
String[] result1 = str.split("\\.");
for (String x : result){
System.out.println(x);
}
“\.” 里面有两个反斜杠,代表的两个转义, 一个是在java中进行转义,一个是在正则中表示转义
与之用法相同的符号有:“| + * ”
public static void main(String[] args) {
//split的实际应用
String string = "name=zhangsan&age=14&sex=male";
//1.先按照&进行拆分
String[] result = string.split("&");
for (String tmp : result){
//现在已经按照&拆分好了,开始进行=的拆分
String[] ret = tmp.split("=");
if (ret.length != 2){
continue;
}
System.out.println(ret[0] + ": " + ret[1]);
}
}
public static void main(String[] args) {
String str = " hello world ";
System.out.println(str.trim());//可以去掉前后两端的空白符
}
运行结果为:
从一个完整的字符串之中截取出部分内容。可用方法如下:
String str = "helloworld" ;
System.out.println(str.substring(5));
System.out.println(str.substring(0, 5));
注意事项:
String str = "helloworld" ;
System.out.println(str.toUpperCase());//让str里面的字符全部大写
System.out.println(str.toLowerCase());//让str里面的字符全部小写
如果先在想实现一个手写字母大写,其他字母小写。 那么可以有:
String result = str.substring(0,1).toUpperCase()+ str.substring(1).toLowerCase();
System.out.println(return);