String 创建的字符串存储在公共池中,而 new 创建的字符串对象在堆上:
String s1 = "Runoob"; // String 直接创建
String s2 = "Runoob"; // String 直接创建
String s3 = s1; // 相同引用
String s4 = new String("Runoob"); // String 对象创建
String s5 = new String("Runoob"); // String 对象创建
注 - String
类是不可变的,因此一旦创建,就无法更改String
对象。 如果想要对字符串进行大量修改,则应使用StringBuffer和StringBuilder。
public class StringDemo {
public static void main(String args[]) {
String greeting = "Hi,Welcome to ZhongGuo";
// length() 方法,它返回字符串对象包含的字符数,表示字符串长度
int len = greeting.length();
// 字符串通常使用+运算符连接
System.out.println( greeting+" 字符串的长度是: " + len );
}
}
执行上面示例代码,得到下结果:
Hi,Welcome to ZhongGuo 字符串的长度是: 22
格式化字符串
Java中使用printf()
和format()
方法来打印带有格式化数字的输出。 String
类有一个等效的类方法format()
,它返回一个String
对象而不是一个PrintStream
对象。
使用String
的static format()
方法可以创建重用的格式化字符串,而不是一次性打印语句。 例如 -
System.out.printf("The value of the float variable is " +
"%f, while the value of the integer " +
"variable is %d, and the string " +
"is %s", floatVar, intVar, stringVar);
上面打印语句可使用格式化写为:
String fs;
fs = String.format("The value of the float variable is " +
"%f, while the value of the integer " +
"variable is %d, and the string " +
"is %s", floatVar, intVar, stringVar);
System.out.println(fs);
String 方法
- String.charAt(int index) ---方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1。
- String.toString() ---方法返回此对象本身(它已经是一个字符串)
- String.toCharArray() ---方法将字符串转换为字符数组
- String.toLowerCase() ---方法将字符串转换为小写
- String. toUpperCase() ---方法将字符串小写字符转换为大写
- String.isEmpty() ---方法用于判断字符串是否为空,如果字符串为空返回 true,否则返回 false
String myStr2 = ""; // 空字符串
String myStr3 = " "; // 多个空格,length() 不为 0
- String.equals() ---方法用于比较两个字符串的内容是否相等。如果相等则返回 true;否则返回 false
- String.equalsIgnoreCase() ---方法用于将字符串与指定的对象比较,不考虑大小写
- String.compareTo(Object o) o -- 要比较的对象 ---方法用于字符串与对象进行比较
- String.compareTo(String anotherString) anotherString -- 要比较的字符串 ---方法用于按字典顺序比较两个字符串
返回值是整型,它是先比较对应字符的大小(ASCII码顺序),如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的长度差值,如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至比较的字符或被比较的字符有一方结束。
• 如果参数字符串等于此字符串,则返回值 0;
• 如果参数字符串大于此字符串,则返回大于 0 的值;
• 如果参数字符串小于此字符串,则返回小于 0 的值;
- String.startsWith(String prefix, int toffset) ---用于检测字符串是否以指定的前缀开始。如果是则返回 true;否则返回 false。
- String.endsWith(String suffix) ---用于测试字符串是否以指定的后缀结束 如何匹配则返回 true;否则返回 false
- String.replace(char searchChar, char newChar) ---通过用 newChar 字符替换字符串中出现的所有searchChar字符,并返回替换后的新字符串
- String.replaceAll(String regex, String replacement) ---方法使用给定的参数 replacement 替换字符串所有匹配给定的正则表达式的子字符串
- String.replaceFirst(String regex, String replacement) --- 方法使用给定的参数 replacement 替换字符串第一个匹配给定的正则表达式的子字符串。 成功则返回替换的字符串,失败则返回原始字符串。
- public int indexOf(int ch): 返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
- int indexOf(int ch, int fromIndex): 返回从 fromIndex 位置开始查找指定字符在字符串中第一次出现处的索引
- int indexOf(String str): 返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
- int indexOf(String str, int fromIndex): 返回从 fromIndex 位置开始查找指定字符在字符串中第一次出现处的索引
public class Main {
public static void main(String args[]) {
String string = "aaa456ac";
//查找指定字符是在字符串中的下标。在则返回所在字符串下标;不在则返回-1.
System.out.println(string.indexOf("b")); // indexOf(String str); 返回结果:-1,"b"不存在
// 从第四个字符位置开始往后继续查找,包含当前位置
System.out.println(string.indexOf("a",3));//indexOf(String str, int fromIndex); 返回结果:6
//(与之前的差别:上面的参数是 String 类型,下面的参数是 int 类型)参考数据:a-97,b-98,c-99
// 从头开始查找是否存在指定的字符
System.out.println(string.indexOf(99));//indexOf(int ch);返回结果:7
System.out.println(string.indexOf('c'));//indexOf(int ch);返回结果:7
//从fromIndex查找ch,这个是字符型变量,不是字符串。字符a对应的数字就是97。
System.out.println(string.indexOf(97,3));//indexOf(int ch, int fromIndex); 返回结果:6
System.out.println(string.indexOf('a',3));//indexOf(int ch, int fromIndex); 返回结果:6
}
}
- str.matches(regex) 用于检测字符串是否匹配给定的正则表达式。匹配则返回 true
- str.split(String regex, int limit) 方法根据匹配给定的正则表达式来拆分字符串。
regex -- 正则表达式分隔符 limit -- 分割的份数。 https://www.runoob.com/java/java-string-split.html
- str.substring(int beginIndex, int endIndex) 返回字符串的子字符串
beginIndex -- 起始索引(包括), 索引从 0 开始 endIndex -- 结束索引(不包括)
- str.valueOf(char c): 返回 char 参数的字符串表示形式
Character 类
Character 类用于对单个字符进行操作。Character 类在对象中包装一个基本类型 char 的值
Character类提供了一系列方法来操纵字符。你可以使用Character的构造方法创建一个Character类对象,例如:
Character ch = new Character('a');
Character.isDigit('5') 用于判断指定字符是否为数字。如果字符为数字则返回 true;否则返回 false。
Character.isLetter() 方法用于判断指定字符是否为字母。如果字符为字母,则返回 true;否则返回 false
Character.isWhitespace() 方法用于判断指定字符是否为空白字符,空白符包含:空格、tab 键、换行符。
Character.toString() 方法用于返回一个表示指定char值的String对象。结果是长度为 1 的字符串,仅由指定的 char 组成
StringBuffer 和 StringBuilder 类
和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer。
StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。
public class RunoobTest{
public static void main(String args[]){
StringBuilder sb = new StringBuilder(10);
sb.append("Runoob..");
System.out.println(sb);
sb.append("!");
System.out.println(sb);
sb.insert(8, "Java");
System.out.println(sb);
sb.delete(5,8);
System.out.println(sb);
}
}
StringBuffer 方法
以下是 StringBuffer 类支持的主要方法:
序号 | 方法描述 |
1 | public StringBuffer append(String s) 将指定的字符串追加到此字符序列。 |
2 | public StringBuffer reverse() 将此字符序列用其反转形式取代。 |
3 | public delete(int start, int end) 移除此序列的子字符串中的字符。 |
4 | public insert(int offset, int i) 将 |
5 | insert(int offset, String str) 将 |
6 | replace(int start, int end, String str) 使用给定 |