Character 类用于对单个字符进行操作,在对象中包装一个基本类型?char?的值。
// 原始字符 'a' 装箱到 Character 对象 ch 中
Character ch = 'a';
//相当于Character ch = new Character('a');
// 原始字符 'x' 用 test 方法装箱
// 返回拆箱的值到 'c'
char c = test('x');
//字符数组
char[] charArray ={'a', 'b', 'c', 'd', 'e'};
//用于判断指定字符是否为字母
System.out.println(Character.isLetter('c'));
System.out.println(Character.isLetter('5'));
/*
true
false
*/
//用于判断指定字符是否为数字
System.out.println(Character.isDigit('c'));
System.out.println(Character.isDigit('5'));
/*
false
true
*/
//用于判断指定字符是否为空白字符,空白符包含:空格、tab 键、换行符
System.out.println(Character.isWhitespace('c'));
System.out.println(Character.isWhitespace(' '));
System.out.println(Character.isWhitespace('\n'));
System.out.println(Character.isWhitespace('\t'));
/*
false
true
true
true
*/
//用于判断指定字符是否为大写字母
System.out.println( Character.isUpperCase('c'));
System.out.println( Character.isUpperCase('C'));
/*
false
true
*/
//用于判断指定字符是否为小写字母
System.out.println( Character.isLowerCase('c'));
System.out.println( Character.isLowerCase('C'));
/*
true
false
*/
//用于将小写字符转换为大写
System.out.println(Character.toUpperCase('a'));//A
//用于将大写字符转换为小写
System.out.println(Character.toLowerCase('A'));//a
1、to String()方法用途广泛,作用是输出数组的内容和类中的属性。
2、to String()方法大多自定义重写输出内容,如果不重写,toString()返回此对象所在的类及对应的堆空间对象实体的首地址值。
3、to String() 方法与数组使用时,调用Arrays中的to string()方法。
4、to String()方法还可以用于对象数组,使用时既要在类中重写to String()方法又要调用Arrays类的to String()方法。
class value {
private int s;
public void set(int i) {
this.s = i;
}
public int get() {
return this.s;
}
@Override
public String toString() {
String s = "value{" +"s=" + this.s +"}";
return s;
}
}
public static void main(String[] args) {
value [] ta=new value[10];//对象数组
for (int i=0;i<ta.length;i++){//初始化对象
ta[i]=new value();
ta[i].set(i);
}
System.out.println(Arrays.toString(ta));//数组使用是要用Arrays类
}
//value{s=0},value{s=1},..........value{s=9}
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 对象创建
常见的有 :
str.length():求字符串长度 ;?"我的名字是 ".concat("yly")连接字符串 ;?
输出格式化数字可以使用 printf() 和 format() 方法。
String 类使用静态方法 format() 返回一个String 对象而不是 PrintStream 对象。
String 类的静态方法 format() 能用来创建可复用的格式化字符串,而不仅仅是用于一次打印输出。
//printf
System.out.printf("浮点型变量的值为 " +
"%f, 整型变量的值为 " +
" %d, 字符串变量的值为 " +
"is %s", floatVar, intVar, stringVar);
//format
String fs;
fs = String.format("浮点型变量的值为 " +
"%f, 整型变量的值为 " +
" %d, 字符串变量的值为 " +
" %s", floatVar, intVar, stringVar);
//用于返回指定索引处的字符。索引范围为从 0 到 length() - 1
String s = "www.runoob.com";
char result = s.charAt(6);
System.out.println(result);
//n
/**
compareTo() 方法用于两种方式的比较:
1、字符串与对象进行比较。
2、按字典顺序比较两个字符串。
返回值是整型,它是先比较对应字符的大小(ASCII码顺序),如果第一个字符和参数的第一个
字符不等,结束比较,返回他们之间的长度差值,如果第一个字符和参数的第一个字符相等,
则以第二个字符和参数的第二个字符做比较,以此类推,直至比较的字符或被比较的字符有一
方结束。
*/
String str1 = "Strings";
String str2 = "Strings";
String str3 = "Strings123";
int result = str1.compareTo( str2 );
System.out.println(result);
result = str2.compareTo( str3 );
System.out.println(result);
result = str3.compareTo( str1 );
System.out.println(result);
/*
0 一般来说,字符串长度都不同,那么返回值是多出来的位数个数,如下-3,+3
-3 如果此字符串小于字符串参数,则返回一个小于 0 的值
3 如果此字符串大于字符串参数,则返回一个大于 0 的值
*/
类比于2.2 :用于按字典顺序比较两个字符串,不考虑大小写
用于将指定的字符串参数连接到字符串上,例:s = s.concat("www.runoob.com");
//用于将此字符串与指定的 StringBuffer 比内容,相同true,不同false
String str1 = "String1";
StringBuffer str3 = new StringBuffer( "String1");
boolean result = str1.contentEquals( str3 );
System.out.println(result);//true
/**public static String copyValueOf(char[] data):
将指定字符数组中的所有字符复制到一个新的字符数组中,并返回一个新的字符串
或
public static String copyValueOf(char[] data, int offset, int count):
允许指定要从输入数组中复制的起始位置和要复制的字符数,其他同上
*/
char[] Str1 = {'h', 'e', 'l', 'l', 'o', ' ', 'r', 'u', 'n', 'o', 'o', 'b'};
String Str2 = "";
Str2 = Str2.copyValueOf( Str1 );
System.out.println("返回结果:" + Str2);
Str2 = Str2.copyValueOf( Str1, 2, 6 );
System.out.println("返回结果:" + Str2);
/*
返回结果:hello runoob
返回结果:llo ru
*/
//用于测试字符串是否以指定的后缀结束
String Str = new String("菜鸟教程:www.runoob.com");
boolean retVal;
retVal = Str.endsWith( "runoob" );
System.out.println("返回值 = " + retVal );
retVal = Str.endsWith( "com" );
System.out.println("返回值 = " + retVal );
/*
返回值 = false
返回值 = true
*/
/**使用 == 和 equals() 比较字符串。
String 中 == 比较引用地址是否相同,equals() 比较字符串的内容是否相同 */
String s1 = "Hello"; ? ? ? ? ? ? ?// String 直接创建
String s2 = "Hello"; ? ? ? ? ? ? ?// String 直接创建
String s3 = s1; ? ? ? ? ? ? ? ? ? // 相同引用
String s4 = new String("Hello"); ?// String 对象创建
String s5 = new String("Hello"); ?// String 对象创建
?
s1 == s1; ? ? ? ? // true, 相同引用
s1 == s2; ? ? ? ? // true, s1 和 s2 都在公共池中,引用相同
s1 == s3; ? ? ? ? // true, s3 与 s1 引用相同
s1 == s4; ? ? ? ? // false, 不同引用地址
s4 == s5; ? ? ? ? // false, 堆中不同引用地址
?
s1.equals(s3); ? ?// true, 相同内容
s1.equals(s4); ? ?// true, 相同内容
s4.equals(s5); ? ?// true, 相同内容
参考2.8,用于将字符串与指定的对象比较,内容不考虑大小写
getBytes() 方法有两种形式:
getBytes(String charsetName):?使用指定的字符集将字符串编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
getBytes():?使用平台的默认字符集将字符串编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
//将字符从字符串复制到目标字符数组
public class Test {
????public static void main(String args[]) {
????????String Str1 = new String("www.runoob.com");
????????char[] Str2 = new char[6];
????????try {
????????????Str1.getChars(4, 10, Str2, 0);
????????????System.out.print("拷贝的字符串为:" );
????????????System.out.println(Str2 );
????????} catch( Exception ex) {
????????????System.out.println("触发异常...");
????????}
????}
}
//拷贝的字符串为:runoob
//Str1.getChars(4, 10, Str2, 0);将Str1从第4个字符复制到第九个
用于返回字符串的哈希码;
字符串对象的哈希码根据以下公式计算:s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1];
使用 int 算法,这里 s[i] 是字符串的第 i 个字符的 ASCII 码,n 是字符串的长度,^ 表示求幂。空字符串的哈希值为 0。
String Str = new String("www.runoob.com");
System.out.println("字符串的哈希码为 :" + Str.hashCode() );
//字符串的哈希码为 :321005537
1、public int indexOf(int ch):?返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1
2、public int indexOf(int ch, int fromIndex):?返回从 fromIndex 位置开始查找指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1
3、int indexOf(String str):?返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1
4、int indexOf(String str, int fromIndex):?返回从 fromIndex 位置开始查找指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1
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
}
}
String str1 = "Runoob";
String str2 = new String("Runoob");
String str3 = str2.intern();
System.out.println(str1 == str2); // false
System.out.println(str1 == str3); // true
/* 以上实例中,str1 是直接赋值的字符串常量,它会被自动添加到字符串池中。str2 是
通 过new String() 创建的新字符串对象,存放在堆中。通过调用 intern() 方法,
将 str2 添加到字符串池中,并返回字符串池中的引用,保存在 str3 中。*/
String str1 = "a";
String str2 = "b";
String str3 = "ab";
String str4 = str1 + str2;
String str5 = new String("ab");
System.out.println(str5.equals(str3));
//true str5.equals(str3)这个结果为true,不用太多的解释,因为字符串的值的内容相同。
System.out.println(str5 == str3);
/*false str5 == str3对比的是引用的地址是否相同,由于str5采用new String方式定义的,所以地址引用一定不相等。所以结果为false。*/
System.out.println(str5.intern() == str3);
/*true 当str5调用intern的时候,会检查字符串池中是否含有该字符串。由于之前定义的str3已经进入字符串池中,所以会得到相同的引用。*/
System.out.println(str5.intern() == str4);
/*false 字符串相加的时候,都是静态字符串的结果会添加到字符串池,如果其中含有变量则不会进入字符串池中。但是字符串一旦进入字符串池中,就会先查找池中有无此对象。如果有此对象,则让对象引用指向此对象。如果无此对象,则先创建此对象,再让对象引用指向此对象。如果str1和str2换成"a"和"b",就true */
1、public int lastIndexOf(int ch):?返回指定字符在此字符串中最后一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1;
2、public int lastIndexOf(int ch, int fromIndex):?返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索,如果此字符串中没有此字符,则返回 -1;
3、public int lastIndexOf(String str):?返回指定子字符串在此字符串中最右边出现处的索引,如果此字符串中没有这样的字符,则返回 -1;
4、public int lastIndexOf(String str, int fromIndex):?返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索,若此字符串中没有此字符,则返回 -1。
public class Test {
????public static void main(String args[]) {
????????String Str = new String("菜鸟教程:www.runoob.com");
????????String SubStr1 = new String("runoob");
????????String SubStr2 = new String("com");
????????System.out.print("查找字符 o 最后出现的位置 :" );
????????System.out.println(Str.lastIndexOf( 'o' ));
????????System.out.print("从第14个位置查找字符 o 最后出现的位置 :" );
????????System.out.println(Str.lastIndexOf( 'o', 14 ));
????????System.out.print("子字符串 SubStr1 最后出现的位置:" );
????????System.out.println( Str.lastIndexOf( SubStr1 ));
????????System.out.print("从第十五个位置开始搜索子字符串 SubStr1最后出现的位置 :" );
????????System.out.println( Str.lastIndexOf( SubStr1, 15 ));
????????System.out.print("子字符串 SubStr2 最后出现的位置 :" );
????????System.out.println(Str.lastIndexOf( SubStr2 ));
????}
}
/*
查找字符 o 最后出现的位置 :17
从第14个位置查找字符 o 最后出现的位置 :13
子字符串 SubStr1 最后出现的位置:9
从第十五个位置开始搜索子字符串 SubStr1最后出现的位置 :9
子字符串 SubStr2 最后出现的位置 :16
*/
//用于检测字符串是否匹配给定的正则表达式
public class Test {
????public static void main(String args[]) {
????????String Str = new String("www.runoob.com");
????????System.out.print("返回值 :" );
????????System.out.println(Str.matches("(.*)runoob(.*)"));
????????
????????System.out.print("返回值 :" );
????????System.out.println(Str.matches("(.*)google(.*)"));
????????System.out.print("返回值 :" );
????????System.out.println(Str.matches("www(.*)"));
????}
}
/*
返回值 :true
返回值 :false
返回值 :true
*/
//用于检测两个字符串在一个区域内是否相等
/**
public boolean regionMatches(int toffset,
String other,
int ooffset,
int len)
或
public boolean regionMatches(boolean ignoreCase,
int toffset,
String other,
int ooffset,
int len)
ignoreCase -- 如果为 true,则比较字符时忽略大小写。
toffset -- 此字符串中子区域的起始偏移量。
other -- 字符串参数。
ooffset -- 字符串参数中子区域的起始偏移量。
len -- 要比较的字符数。
*/
public class Test {
? ? public static void main(String args[]) {
? ? ? ? String Str1 = new String("www.runoob.com");
? ? ? ? String Str2 = new String("runoob");
? ? ? ? String Str3 = new String("RUNOOB");
? ? ? ? System.out.print("返回值 :" );
? ? ? ? System.out.println(Str1.regionMatches(4, Str2, 0, 5));
? ? ? ? System.out.print("返回值 :" );
? ? ? ? System.out.println(Str1.regionMatches(4, Str3, 0, 5));
? ? ? ? System.out.print("返回值 :" );
? ? ? ? System.out.println(Str1.regionMatches(true, 4, Str3, 0, 5));
? ? }
}
}
/*
返回值 :true
返回值 :false
返回值 :true
*/
public String replace(char searchChar, char newChar) ? ?
用 newChar 字符替换字符串中出现的所有 searchChar 字符,并返回替换后的新字符串
public class Main {
? ? public static void main(String args[]) {
? ? ? ? String Str = new String("Runoob");
? ? ? ? System.out.print("返回值 :" );
? ? ? ? System.out.println(Str.replace('o', 'T'));
? ? ? ? System.out.print("返回值 :" );
? ? ? ? System.out.println(Str.replace('u', 'D'));
? ? }
}
/*
返回值 :RunTTb
返回值 :RDnoob
*/
public String replaceAll(String regex, String replacement)
使用给定的参数 replacement 替换字符串所有匹配给定的正则表达式的子字符串
//成功则返回替换的字符串,失败则返回原始字符串
public class Test {
? ? public static void main(String args[]) {
? ? ? ? String Str = new String("www.google.com");
? ? ? ? System.out.print("匹配成功返回值 :" );
? ? ? ? System.out.println(Str.replaceAll("(.*)google(.*)", "runoob" ));
? ? ? ? System.out.print("匹配失败返回值 :" );
? ? ? ? System.out.println(Str.replaceAll("(.*)taobao(.*)", "runoob" ));
? ? }
}
/*
匹配成功返回值 :runoob
匹配失败返回值 :www.google.com
*/
public String replaceFirst(String regex,String replacement)
使用给定的参数 replacement 替换字符串第一个匹配给定的正则表达式的子字符串
//成功则返回替换的字符串,失败则返回原始字符串
public class Test {
????public static void main(String args[]) {
????????String Str = new String("hello runoob,I am from runoob。");
????????System.out.print("返回值 :" );
????????System.out.println(Str.replaceFirst("runoob", "google" ));
????????System.out.print("返回值 :" );
????????System.out.println(Str.replaceFirst("(.*)runoob(.*)", "google" ));
????}
}
/*
返回值 :hello google,I am from runoob。
返回值 :google
*/
根据匹配给定的正则表达式来拆分字符串。
注意:?.?、?$、?|?和?*?等转义字符,必须得加?\\? ,多个分隔符,可以用?|?作为连字符。
public String[] split(String regex, int limit) ,返回分割后得到的字符串数组
regex?-- 正则表达式分隔符。
limit?-- 分割的份数。
public class Test {
public static void main(String args[]) {
String str = new String("Welcome-to-Runoob");
System.out.println("- 分隔符返回值 :" );
for (String retval: str.split("-")){
System.out.println(retval);
}
System.out.println("");
System.out.println("- 分隔符设置分割份数返回值 :" );
for (String retval: str.split("-", 2)){
System.out.println(retval);
}
System.out.println("");
String str2 = new String("www.runoob.com");
System.out.println("转义字符返回值 :" );
for (String retval: str2.split("\\.", 3)){
System.out.println(retval);
}
System.out.println("");
String str3 = new String("acount=? and uu =? or n=?");
System.out.println("多个分隔符返回值 :" );
for (String retval: str3.split("and|or")){
System.out.println(retval);
}
}
}
/*
- 分隔符返回值 :
Welcome
to
Runoob
- 分隔符设置分割份数返回值 :
Welcome
to-Runoob
转义字符返回值 :
www
runoob
com
多个分隔符返回值 :
acount=?
uu =?
n=?
*/
public boolean startsWith(String prefix, int toffset)
或
public boolean startsWith(String prefix)
用于检测字符串是否以指定的前缀开始,返回值为true/false
public class Test {
public static void main(String args[]) {
String Str = new String("www.runoob.com");
System.out.print("返回值 :" );
System.out.println(Str.startsWith("www") );
System.out.print("返回值 :" );
System.out.println(Str.startsWith("runoob") );
System.out.print("返回值 :" );
System.out.println(Str.startsWith("runoob", 4) );
}
}
/*
返回值 :true
返回值 :false
返回值 :true
*/
public CharSequence subSequence(int beginIndex, int endIndex)
返回一个新的字符序列,它是此序列的一个子序列
public class Test {
public static void main(String args[]) {
???? String Str = new String("www.runoob.com");
???? System.out.print("返回值 :" );
System.out.println(Str.subSequence(4, 10) );
????}
}
//返回值 :runoob ————第四个到第九个
public String substring(int beginIndex)
或
public String substring(int beginIndex, int endIndex)
返回字符串的子字符串
beginIndex?-- 起始索引(包括), 索引从 0 开始。
endIndex?-- 结束索引(不包括)。
public class RunoobTest {
public static void main(String args[]) {
String Str = new String("This is text");
System.out.print("返回值 :" );
System.out.println(Str.substring(4) );
System.out.print("返回值 :" );
System.out.println(Str.substring(4, 10) );
}
}
/*
返回值 : is text
返回值 : is te————从第四个开始到第十个(但不包括第十个)
*/
将字符串转换为字符数组
//将字符串转换为小写
String Str = new String("WWW.RUNOOB.COM");
System.out.print("返回值 :" );
System.out.println( Str.toLowerCase() );//返回值 :www.runoob.com
//将字符串小写字符转换为大写
String Str = new String("www.runoob.com");
System.out.print("返回值 :" );
System.out.println( Str.toUpperCase() );//返回值 :WWW.RUNOOB.COM
//删除字符串的头尾空白符
String Str = new String(" www.runoob.com ");
System.out.println( Str.trim() );//删除头尾空白 :www.runoob.com
//1、返回参数类型的表示形式
public class Test {
? ? public static void main(String args[]) {
? ? ? ? double d = 1100.00;
? ? ? ? boolean b = true;
? ? ? ? long l = 1234567890;
? ? ? ? char[] arr = {'r', 'u', 'n', 'o', 'o', 'b' };
? ? ? ? System.out.println("返回值 : " + String.valueOf(d) );
? ? ? ? System.out.println("返回值 : " + String.valueOf(b) );
? ? ? ? System.out.println("返回值 : " + String.valueOf(l) );
? ? ? ? System.out.println("返回值 : " + String.valueOf(arr) );
? ? }
}
/*很容易理解,就是把对应的boolean/int/byte等基本数据类型变量转换成字符串
int i=10;
String str = String.valueOf(i); ————str="10"
相对比的是parseInt/parseDouble等方法,将字符串转换成相对应变量
Integer.parseInt(String s) : 将 s 转换成 int
*/
/*2、将不同变量对象包装成另外一种变量对象,valueOf 方法将字符串转换为包装类型的数字,并保留前导零,同时具有对象的特性;parseInt 方法将字符串转换为基本数据类型的数字,忽略前导零,但不具有对象的特性。在处理无效字符串*/
String str = "0123";
Integer i = Integer.valueOf(str);
//将存储在公共池的str——字符串"0123"变成Integer类型i,值为123
String str = "0123";
int i = Integer.parseInt(str);
//将"0123"变成int类型i,值为123
//判断字符串中是否包含指定的字符或字符串
String myStr = "Runoob";
System.out.println(myStr.contains("o"));//true
System.out.println(myStr.contains("s"));//false
//用于判断字符串是否为空
public class Main {
public static void main(String[] args) {
String myStr2 = ""; // 空字符串
String myStr3 = " "; // 空格也是字符串,length() 不为 0
System.out.println("myStr2 是否为空:" + myStr2.isEmpty());
System.out.println("myStr3 长度:" + myStr3.length());
System.out.println("myStr3 是否为空:" + myStr3.isEmpty());
}
}
/*
myStr2 是否为空:true
myStr3 长度:4
myStr3 是否为空:false
*/
参考资料:菜鸟教程 - 学的不仅是技术,更是梦想!
参考文献1:JAVA toString方法详解-CSDN博客