String 的常用操作
String 的常用操作
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() 。