构造方法摘要
字符串的内容是不会发生改变的,他的对象在创建后不能被更改
String s="…"; : 使用直接赋值的方式获取一个字符串对象 。 其字符串会存在 串池(StringTable)中,也可理解为字符串常量池,在JDK7版本开始,从方法取中挪到了堆内存中
String s="abc"
public String() : 使用new的方式来获取一个字符串对象,使其表示一个不含任何内容的空字符(空参构造)
String s=new String();
public String(String original) : 传递一个字符串,根据传递的字符串再创建一个字符串对象
String s=new String("abc");
public String(Char[ ] chs) :传递一个字符数组,根据字符数组再创建一个字符串对象
char[] chs={'a','b','c'};
String s=new String(chs);
public String(byte[] chs) :传递一个字节数组,根据字节数组再创建字符串对象
byte[] bytes={97,98,99};
String s=new String(bytes); // 输出结果为abc
方法摘要
char charAt(int index) :返回指定索引处的 char 值。
int codePointAt(int index) :返回指定索引处的字符(Unicode 代码点)。
int codePointBefore(int index) :返回指定索引之前的字符(Unicode 代码点)。
int codePointCount(int beginIndex, int endIndex) :返回此 String 的指定文本范围中的 Unicode 代码点数。
int compareTo(String anotherString) : 按字典顺序比较两个字符串。
int compareToIgnoreCase(String str) :按字典顺序比较两个字符串,不考虑大小写。
String concat(String str) : 将指定字符串连接到此字符串的结尾。
boolean contains(CharSequence s) :当且仅当此字符串包含指定的 char 值序列时,返回 true。
boolean contentEquals(CharSequence cs) :将此字符串与指定的 CharSequence 比较。
boolean contentEquals(StringBuffer sb) : 将此字符串与指定的 StringBuffer 比较。
static String copyValueOf(char[] data) : 返回指定数组中表示该字符序列的 String。
static String copyValueOf(char[] data, int offset, int count) : 返回指定数组中表示该字符序列的 String。
boolean endsWith(String suffix) : 测试此字符串是否以指定的后缀结束。
boolean equals(Object anObject) : 将此字符串与指定的对象比较,结果完全一样才为true。
boolean equalsIgnoreCase(String anotherString) : 将此 String 与另一个 String 比较,忽略大小写。
static String format(Locale l, String format, Object… args) : 使用指定的语言环境、格式字符串和参数返回一个格式化字符串。
static String format(String format, Object… args) : 使用指定的格式字符串和参数返回一个格式化字符串。
byte[] getBytes() : 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
byte[] getBytes(Charset charset) : 使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组。
byte[] getBytes(String charsetName) : 使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) : 将字符从此字符串复制到目标字符数组。
int hashCode() : 返回此字符串的哈希码。
int indexOf(int ch) : 返回指定字符在此字符串中第一次出现处的索引。
int indexOf(int ch, int fromIndex) : 返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。
int indexOf(String str) : 返回指定子字符串在此字符串中第一次出现处的索引。
int indexOf(String str, int fromIndex) : 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
String intern() : 返回字符串对象的规范化表示形式。
boolean isEmpty() : 当且仅当 length() 为 0 时返回 true。
int lastIndexOf(int ch) : 返回指定字符在此字符串中最后一次出现处的索引。
int lastIndexOf(int ch, int fromIndex) : 返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。
int lastIndexOf(String str) : 返回指定子字符串在此字符串中最右边出现处的索引。
int lastIndexOf(String str, int fromIndex) : 返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。
int length() : 返回此字符串的长度。
boolean matches(String regex) : 告知此字符串是否匹配给定的正则表达式。
int offsetByCodePoints(int index, int codePointOffset) : 返回此 String 中从给定的 index 处偏移 codePointOffset 个代码点的索引。
boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) :测试两个字符串区域是否相等。
boolean regionMatches(int toffset, String other, int ooffset, int len) :测试两个字符串区域是否相等。
String replace(char oldChar, char newChar) : 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
String replace(CharSequence target, CharSequence replacement) : 使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。
String replaceAll(String regex, String replacement) : 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
String replaceFirst(String regex, String replacement) : 使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。
String[] split(String regex) : 根据给定正则表达式的匹配拆分此字符串。
String[] split(String regex, int limit) : 根据匹配给定的正则表达式来拆分此字符串。
boolean startsWith(String prefix) : 测试此字符串是否以指定的前缀开始。
boolean startsWith(String prefix, int toffset) : 测试此字符串从指定索引开始的子字符串是否以指定前缀开始。
CharSequence subSequence(int beginIndex, int endIndex) : 返回一个新的字符序列,它是此序列的一个子序列。
String substring(int beginIndex) : 返回一个新的字符串,它是此字符串的一个子字符串。
String substring(int beginIndex, int endIndex) : 将此字符串转换为一个新的字符数组【可实现字符串的切片操作】。
char[] toCharArray() : 将此字符串转换为一个新的字符数组。
String toLowerCase() : 使用默认语言环境的规则将此 String 中的所有字符都转换为小写。
String toLowerCase(Locale locale) : 使用给定 Locale 的规则将此 String 中的所有字符都转换为小写。
String toString() : 返回此对象本身(它已经是一个字符串!)。
String toUpperCase() : 使用默认语言环境的规则将此 String 中的所有字符都转换为大写。
String toUpperCase(Locale locale) : 使用给定 Locale 的规则将此 String 中的所有字符都转换为大写。
String trim() :返回字符串的副本,忽略前导空白和尾部空白。
static String valueOf(boolean b) : 返回 boolean 参数的字符串表示形式。
static String valueOf(char c) : 返回 char 参数的字符串表示形式。
static String valueOf(char[] data) : 返回 char 数组参数的字符串表示形式。
static String valueOf(char[] data, int offset, int count) : 返回 char 数组参数的特定子数组的字符串表示形式。
static String valueOf(double d) : 返回 double 参数的字符串表示形式。
static String valueOf(float f) : 返回 float 参数的字符串表示形式。
static String valueOf(int i) : 返回 int 参数的字符串表示形式。
static String valueOf(long l) : 返回 long 参数的字符串表示形式。
static String valueOf(Object obj) :返回 Object 参数的字符串表示形式。
字符串常见操作
① 字符串的遍历
需求一:键盘录入一个字符串,使用程序实现在控制台遍历该字符串
import java.util.Scanner;
public class YY{
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("请输入一个字符串: ");
String str=in.next();
for (int i = 0; i <str.length() ; i++) {
char chr = str.charAt(i);
System.out.print(chr+" ");
}
}
}
② 字符串的统计
需求二:键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数(不考虑其他字符)
import java.util.Scanner;
public class YY{
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.print("请输入一个字符串: ");
String str=in.nextLine();
int bigCount=0;
int smallCount=0;
int numberCount=0;
for (int i = 0; i <str.length() ; i++) {
char chr = str.charAt(i);
if(chr>='A' && chr<='Z' ){
// char类型的变量在参与计算时会自动提升为int————》查询ascii码表
bigCount++;
}
if(chr>='a' && chr<='z'){
smallCount++;
}
if(chr>='0' &&chr<='9'){
numberCount++;
}
}
System.out.println(str);
System.out.println("大写字母共有: "+bigCount);
System.out.println("小写字母共有: "+smallCount);
System.out.println("数字字符共有: "+numberCount);
}
}
需求三:把int数组中的数据按指定的格式拼接成字符串返回,调用该方法,并在控制台输出
注意 (以下三个语句系统占用的内存依次增多)
int[] a; //只是声明了一个数组变量,并未初始化,无法使用,使用会出错
int[] a = null; //声明了一个数组变量,赋值为 null;虽然初始化,
但是一个空指针,没有指向一个有效的数组什么都做不了,
无法调用这个对象的方法,会产生空指针异常
int[] a = new int[0]; //声明并创建一个数组对象,长度为0,是一个数组对象,只不过没有内容
由以上可以得出结论对于数组,不但要判断它是否为空指针,也需要判断它是否有内容,同时要先判断空指针再判断长度是否为0,顺序不能颠倒,因为空指针没有length属性
eg:
/*数组内容为 int[] arr={1,2,3}
执行方法后的输出结果为字符串:[1,2,3] */
import java.util.Arrays;
public class YY {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
String str = Str(arr);
System.out.println("原始内容为: "+ Arrays.toString(arr));
System.out.println("拼接后的字符串内容为: "+str);
}
public static String Str(int arr[]) {
if (arr == null) {
return "";
}
if (arr.length == 0) {
return "[]";
}
String result = "[";
for (int i = 0; i < arr.length; i++) {
if (i== arr.length-1){
result = result + arr[i];
}else
result = result + arr[i]+",";
}
return result+"]";
}
}
需求四:定义一个方法,实现字符串的反转,键盘录入一个字符串,调用该方法后,在控制台输出结果
eg:
/键盘录入abc,输出结果为cba/
import java.util.Scanner;
public class YY {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("请输入一个字符串: ");
String str=in.nextLine();
Str(str);
}
public static void Str(String str){
String str1="";
for (int i = 0; i <str.length() ; i++) {
char chr = str.charAt(str.length()-1-i);
str1=str1+chr;
}
System.out.println("反转后的字符串结果为: "+str1);
}
}
import java.util.Scanner;
public class YY {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int money;
// 1、键盘录入金额
while (true) {
System.out.println("请录入金额: ");
money = in.nextInt();
if (0 <= money && money <= 9999999) {
break;
} else {
System.out.println("金额无效");
}
}
// 2、获取money中的每一位数字
String sss = "";
while (true) {
// 从右往左获取数据(右侧是数据的个位)
int ge = money % 10;
String moneyStr = getMoneyStr(ge);
sss = moneyStr + sss;
money = money / 10;
// 如果所有数字获取到,此时money为0;循环结束
if (money == 0) {
break;
}
}
// 3、在前面补零,补齐7位
int count=7-sss.length();
for (int i = 0;i< count; i++) {
sss = "零"+ sss;
}
// sss——————>零零零零伍肆贰
// 4、插入单位
// 定义一个数组表示单位——————>最终输出结果为Result
String Result="";
String [] unit= {"佰","拾","万","仟","佰","拾","元",};
for (int i = 0; i <sss.length(); i++) {
Result=Result+(sss.charAt(i)+unit[i]);
}
System.out.println(Result);
}
// 定义一个方法,将数字变为大写中文(查表法)
public static String getMoneyStr(int number){
// 定义数组,让数字跟大写的中文产生一个对应的关系
String[] arr={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
// 返回结果
return arr[number];
}
}
StringBuilder可以看成是一个容器,创建之后里面的内容是可变的
● 作用:提高字符串的操作效率
构造方法摘要
public StringBuilder() :创建一个空白字符串,不含任何内容
public StringBuilder(String str) :根据字符串的内容,来创建可变字符串对象
StringBuilder常用方法
public StringBuilder append(任意类型):添加数据,并返回对象本身
public StringBuilder reverse():反转容器中的内容
public int length(): 返回长度(字符出现的个数)
public String toString():通过toString()就可以实现把StringBuilder转换为String
Stringjioner跟StringBuilder一样,也可以看成是一个容器,创建之后里面的内容是可变的
● 作用:提高字符串的操作效率,而且代码编写特别简介,但目前市场上很少用(JDK8出现)
构造方法摘要
public StringJoiner(间隔符号):创建一个StringJoiner对象,指定拼接时的间隔符号
public StringJoiner(间隔符号,开始符号,结束符号):创建一个StringJoiner对象,指定拼接时的间隔符号、开始符号、结束符号
StringBuilder常用方法
public StringJoiner add():添加数据,并返回对象本身
public int length(): 返回长度(字符出现的个数)
public String toString():返回一个字符串(该字符串就是拼接后的结果)
调整字符串的内容并比较 :给定两个字符串A与b。A的旋转操作就是将A 最左边的字符移动到最右边。例如:A=‘abcde’,在移动一次之后结果就是’bcdea’,如果在若干次调整操作后,A能变成B,那么返回True。如果不匹配成功,则返回false
public class YY {
public static void main(String[] args) {
// 字符串A
String A = "abcde";
String B = "cdeab";
boolean result = check(A, B);
System.out.println(result);
}
public static boolean check(String strA, String strB) {
int count=0;
for (int i = 0; i < strA.length(); i++) {
strA = rotate(strA);
count++;
if (strA.equals(strB)) {
System.out.println("共旋转次数为: "+count);
return true;
}
}
return false;
}
// 旋转字符串
public static String rotate(String str){
//获取最左边的字符
char first = str.charAt(0);
//获取剩余的字符
String end = str.substring(1);
//返回旋转后的字符
return end+first;
}
}