String 的常用操作

Java框架

浏览数:487

2019-3-25

String 类,我可以不负责的说在 Java 中这个类应该是使用最频繁的类了。然而关于它的常用的操作,我却不甚了解。整理这个东西很反人性的,这些方法,你看到他的时候感觉很简单,但是真正用的时候还是不太会,还是会借助网络,今天我就来强行整理一波,不求全,但求精。

先说说 String 对象的构造器,创建一个字符创可以使用如下方法

String s = "123";

String s1 = new String("123");

char[] value = {'1','2','3'};
String s2 = new String(value);
System.out.println(s2); // 123

char[] value1 = {'0','1','2','3','4'};
String s3 = new String(value1,1,3); // 从哪里开始,取几位
System.out.println(s3); //123

StringBuilder sb = new StringBuilder("123");
String s4 = new String(sb);
System.out.println(s4); //123

我就提一下,为什么人家类创建对象都用 new ,而 String 可以直接赋值呢?s 和 s1 的区别到底在哪呢?这样设计的思路还是因为 String 的超高使用频率,为了节省空间,s 的创建过程为在内存中创建一个 “123” 这个 String,然后将引用赋给 s ,如果这个时候还有一条语句 String s5 = “123”,那么 JVM 将不再创建 “123”,而是直接将第一个 “123” 的引用赋给 s5,也就是说 s 和 s5 使用同一块内存,但是使用 new 创建就不一样,不论之前有没有,照样在堆中开辟新的空间 。

下面就看看常用的方法有那些吧!

基础篇

String s = "I don't like JAVA !";

// 返回字符串的长度,注意和数组的length属性的区别呦 !
int length = s.length(); 
System.out.println(length); // 19

// 返回某个字符在字符串中的位置,即数组下标
int position = s.indexOf('!');
System.out.println(position); // 18

// 返回指定下标的字符
char charAt = s.charAt(0);
System.out.println(charAt); // I

// 求子串 参数为下标的起止位置,含前不含后。尾下标可以默认不写
String substring = s.substring(13, 19);
System.out.println(substring); // JAVA !

// 将字符串转换为 大写,相应的还有转换为小写 toLowerCase()
String s1 = s.toUpperCase();
System.out.println(s1); // I DON'T LIKE JAVA !

提高篇

// 字符串的替换,前为旧串,后为新串。
String s2 = s.replace("don't", "do");
System.out.println(s2); // I do like JAVA !

// 去除前后空格
String trim =s.trim();
System.out.println(trim); // I don't like JAVA !

// 使用指定的语言环境、格式字符串和参数返回一个格式化字符串。
String format = String.format("请说出真心话: %s", s);
System.out.println(format); // 请说出真心话: I don't like JAVA !

// 以指定字符串进行分割字符串,得到字符串数组。
String[] split = s.split(" ");
for (int i = 0; i < split.length; i++) {
    System.out.print(split[i]); // Idon'tlikeJAVA!
}

// 将一个字符串转换成字节数组,得到一个系统默认的编码格式的字节数组。
byte[] bytes = s.getBytes();

// 将一个字符串转换成字符数组 ,返回的数组中是一个个的字符。
char[] array = s.toCharArray();

郁闷篇

不知道你们是怎么样的,我在写代码的时候总是会不自觉地使用 “==” 来比较两个字符串是否相等。虽然我明确的知道这是不对的,我想还是因为我代码写的少… ,所以你们记住了啊,要使用 equals 方法的!给个例子,自己感受感受区别。

String s3 = "123";
String s4 = new String("123");
String s5 = "123";
System.out.println(s3 == s4); // false
System.out.println(s3 == s5); // true
System.out.println(s3.equals(s4)); // true

最后来看一看基本类型和字符串之间的相互转化。

String s3 = "123";

int num = Integer.parseInt(s3);
System.out.println(num); // 123

String string = String.valueOf(num);
System.out.println(string); // 123

套路就是想得到基本数据类型,就使用对应包装类调用包装类的 praseXXX() 方法。想得到字符串就使用 String 调用 String 类的静态重载方法 valueOf() 。