概述
字符串
- 用一对双引号“”括起来的字符序列。
- Java语言中,字符串常量或变量均用类实现。
字符串有两大类:
1)创建之后不会再做修改和变动(String类对象)
2)创建之后允许再做修改(StringBuilder类对象)声明为final,不能被继承
创建String类对象
使用String类的构造方法创建字符串变量
🍉格式一:
String 变量名;
变量名 = new String("字符串");
eg:String s; //声明字符串型引用变量s,此时s的值为null
s=new String(“Hello”);
//在堆内存中分配空间,并将s指向该字符串首地址
🍉 格式二:
String 变量名 = new String("字符串");
eg:String s=new String("Hello");
使用字符串字面值创建String对象
🍉 格式三:
String 变量名 = "字符串";
eg:String s="Java is cool";
字符串基本操作
字符串在内存的表示。设有下面声明:
String str = new String("Java is cool");
这个字符串共有12个字符,每个字符有一个下标,下标从0开始。 可以通过下标访问每个字符。
可以调用String类的方法操作字符串
例:
String s = new String("Java is cool");
System.out.println(s.length()); //12
System.out.println(s.substring(5,7));//is
System.out.println(s.substring(8));//cool
System.out.println(s.toUpperCase());//JAVA IS COOL
System.out.println(s.toLowerCase());//java is cool
System.out.println(s.replace(‘a’, ‘A’));//jAvA is cool
System.out.println(s.isEmpty());//false
System.out.println(s.charAt(6));//s
String s1 = "Cool,";
s1 = s1.concat(s);
System.out.println(s1);//Cool, Java is cool
实战演练
例:编写一个方法判断字符串是否是回文串。
思路:取出字符串的第一个和最后一个比较,若不相同,程序结束,返回false。若相等,比较第二个字符和倒数第二字符,直到比较到字符串的中间字符为止,若都相等,则是回文,返回true。
package shujia_test1;
import java.util.Scanner;
public class Csdn6_1 {
public static boolean isPalindrome(String s) {
int low = 0;
int high = s.length() - 1;
while (low < high) {
if (s.charAt(low) != s.charAt(high))
return false;
low++;
high--;
}
return true;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个字符串:");
String s = sc.nextLine();
if (isPalindrome(s))
System.out.println(s + ":是回文。");
else
System.out.println(s + ":不是回文。");
}
}
字符串查找
String类提供了从字符串中查找字符
和子串
的方法
public int indexOf( int ch):查找字符ch第一次出现的位置(在原字符串中的下标),如果查找不成功,返回-1。
public int indexOf( int ch, int fromIndex):查找字符ch从fromIndex开始第一次出现的位置。
public int lastIndexOf( int ch):查找字符ch最后一次出现的位置
public int lastIndexOf( int ch, int endIndex):查找字符ch到endIndex为止最后一次出现的位置。
public int indexOf(int ch):接收一个整数(字符的 Unicode 编码值)作为参数。
public int indexOf(char ch):接收一个字符(字符字面量)作为参数。
你应该根据你的需求选择使用哪一个。如果你有一个字符的 Unicode 编码值,就使用第一个;如果你有一个字符字面量,就使用第二个。
上述方法中int ch换成String str,表示子串的相关查找
例:
String s = new String("This is a Java string.");
System.out.println(s.length());//22
System.out.println(s.indexOf(‘a’));// 8
System.out.println(s.lastIndexOf(‘a’, 12));// 11
System.out.println(s. indexOf("is"));//2
System.out.println(s. indexOf("my"));//-1
System.out.println(s. lastIndexOf ("is"));// 5
字符串转换为数组
字符串不是数组,String类有从字符串转换成数组的方法
public char[] toCharArray():将字符串中的字符转换成数组
public void getChars( int srcBegin, int srcEnd,char []dst, int dstBegin):将字符串中从起始位置srcBegin到结束位置srcEnd之间的字符复制到字符数组dst中, dstBegin为目标数组的起始位置
例:
String s = new String("This is a Java string.");
Char []chars = s.toCharArray();
System.out.println(chars);//This is a Java string.
Char []subs = new char[4];
s.getChars(10,14,subs,0);
System.out.println(subs);//Java
字符串比较
1、String类有比较两个字符串内容是否相等的方法
public boolean equals(String anotherString):比较两个字符串内容是否相等,区分大小写
public boolean equalsIgnoreCase(String anotherString):比较两个字符串内容是否相等,不区分大小写
例:
String s1 = new String("Hello");
String s2 = new String("Hello"); System.out.println(s1.equals(s2));//true
System.out.println(s1.equals(hello));//false
System.out.println(s1.equalsIgnoreCase (hello));//true
不能使用“==”号来比较字符串内容是否相等
String s1 = new String("Hello");
String s2 = new String("Hello");
System.out.println(s1== s2);//false
解释:
在 Java 中,当你使用 new 关键字创建对象时,每次调用都会在内存中分配一个新的空间来存储该对象,即使这些对象的内容相同。因此,s1 和 s2 虽然都包含了字符串 “Hello”,但它们是在堆内存中的两个不同位置创建的独立对象。
当你使用==操作符来比较 s1 和 s2 时,你实际上是在比较这两个对象的引用(即它们在内存中的地址),而不是它们的内容。由于 s1 和 s2 指向的是堆内存中的两个不同位置,所以 s1 == s2 的结果将是 false。
String s1 = "Hello";
String s2 = "Hello";
System.out.println(s1== s2);//true
解释:
字符串常量是存储在常量池中,内容相同的字符串在常量池中只有一个副本
2、String类有比较两个字符串大小的方法
public int compareTo (String another):
当前字符串与参数字符串比较
如果字符串相等,则返回 0;
如果调用字符串的字典顺序在参数字符串之前,则返回小于 0 的值;
如果调用字符串的字典顺序在参数字符串之后,则返回大于 0 的值。
例:
String s1 = "ABC";
String s2 = "ABE";
System.out.println(s1.compareTo(s2));//-2
public int compareToIgnoreCase (String another):当前字符串与参数字符串比较,不区分大小写
实战演练
例:利用起泡排序法,将字符串数组由小到大排序
package shujia_test1;
public class Csdn6_2 {
public static void main(String[] args) {
String[] str = { "China", "USA", "Russia", "France", "England" };
for (int i = str.length - 1; i > 0; i--)
for (int j = 0; j < i; j++) {
if (str[j].compareTo(str[j + 1]) > 0) {
String temp = str[j];
str[j] = str[j + 1];
str[j + 1] = temp;
}
}
for (String s : str)
System.out.print(s + " ");
}
}
运行结果:
字符串的拆分与组合
String类的split()
方法可以将一个字符串分解成子字符串
public String[] split(String regex): 参数regex表示正则表达式,根据给定的正则表达式将字符串分解成字符串数组
例:
String ss = "one little, two little,three little.";
String []str = ss.split("[ , .]");//含义是使用空格、逗号、点为分隔符拆分字符串
for(String s : str){
System.out.println(s);//one
//little
//two
//little
//three
//little
}
String类的join()方法将字符数组组合成字符串
public static String join(CharSequence delimiter,CharSequence... elements):使用给定的分隔符delimiter将elements的各元素组合成一个新字符串
例:
String joined = String.join( "/", "usr", "local", "bin" );
System.out.println(joined);
//usr/local/bin
String []seasons = { "春", "夏", "秋", "冬" };
String s = String.join( "-", seasons );
System.out.println(s);//春-夏-秋-冬
博主用心写,读者点关注,互动传真情,知识不迷路