字符串仍然是类,字符串对象的产生有如下四种方式:
String str="abc";
String str1=new String("abc");
char[] data={'a','b','c'};
String str2=new String(data);
String str3=String.valueOf("abc");
(1)==操作符比较的是两个字符串对象是否指向相同的地址
(2)equals方法判断两个字符串对象内容是否相同。
按照Unicode编码将字符逐个比较,当两个字符串的字符数组对应的内容完全相同,equals才返回true(区分大小写的比较)。equalssIngoreCase方法不区分大小写。
(3)compareTo方法进行两个字符串的大小比较
a. 先按照两个字符串对应的字符进行编码比较,若碰到第一个不相等的字符,直接返回编码差值。
b. 若前k个字符完全相等(k是两个字符串中的最小值),返回值为两个字符串的长度差。
c.compareToIngoreCase()不区分大小写。
字符串的查找,本质上就是在内部的字符数组上进行遍历查找。
char charAt(int index)
:返回字符串上指定索引位置的字符,注意索引的合法性[0,n)循环遍历+charAt()
取出字符判断,如果字符‘0’,则为数字字符。
character.isDigit();
方法也可以判断是否是数字。
代码:
public static boolean isNum(String str)
{
for (int i = 0; i < str.length(); i++) {
char c=str.charAt(i);
// if(c<'0'||c>'9')
// {
// return false;
// }
//JDk,包装类Character判断是否是纯数字
if(!Character.isDigit(c))
{
return false;
}
}
return true;
}
boolean contains(String regex)
:查找当前字符串中是否包含指定格式的字符串regexint indexOf(int ch);
返回ch第一次出现的位置,没有返回-1int indexOf(int ch,int fromIndex);
从fromIndex位置开始找ch第一次出现的位置,没有返回-1int indexOf(String str);
返回str第一次出现的位置,没有返回-1int indexOf(String str,int fromIndex);
从fromIndex位置开始找str第一次出现的位置,没有返回-1int lastIndexOf();
无论什么类型转为字符串对象,统一推荐使用String.valueOf(任意类型),当传入的是自定义类型时,默认会调用toString进行转换,要求我们在自定义类型中覆写toString方法。
//将任意的数值转换字符串,采用字符串的几种构造方式,推荐采用字符串的valueOf方法
//int-->str
String str=String.valueOf(1234);
//double->str
String str1=String.valueOf(12.34);
//boolean
String str2=String.valueOf(false);
//自定义类型转为字符串,调用toString方法(需要覆写)
String str3=String.valueOf(new Student("66",1));
将字符串对象转为相应的基本类型:使用各个包装类的parseXXX方法来进行转换,这个转换当字符串中出现非数字时会报错。
int a=Integer.parseInt(str);
double b=Double.parseDouble(str1);
boolean c=Boolean.parseBoolean(str2);
System.out.println(a);
System.out.println(b);
System.out.println(c);
只要不是合法的布尔值,统一都会转为false
对应英文,不包含中文
public static void lowerOrUpper()
{
String s1="hello";
String s2="HELLO";
//转大写
System.out.println(s1.toUpperCase());
//转小写
System.out.println(s2.toLowerCase());
}
1. 字符串转字符数组:str–>char[ ]
方法:toCharArray()
public static void str2Arr()
{
String str="hello";
char[] c=str.toCharArray();
for (int i = 0; i < c.length; i++) {
System.out.print(c[i]+" ");
}
}
2. 字符串转字节数组:str–>byte[ ]
方法:getByte() 按照当前系统默认编码转为字节数组
当进行网络编程或者文件IO操作,需要将字符串序列化为字节流
public static void str2Arr()
{
String str="hello";
//默认UTF-8
byte[] ch=str.getBytes();
//传入编码规则
byte[] ch=str.getBytes(StandardCharsets.UTF-8);
for (int i = 0; i < ch.length; i++) {
System.out.print(ch[i]+" ");
}
}
编码:将任意字符按照指定的规则转为数字就称为编码
比较常用的编码规则:
ASCII:专门针对英文字母的编码,‘a’–>97,不管哪种编码格式,针对英文字母的转换都会采用ASCII的转换规则
GBK:专门针对中文的编码,包含繁体中文,一个中文对应两个字节
GB2312:只包含简体中文
UTF-8:世界上所有语言都可以用UTF-8来得到转换,一个中文字符转为三个字节
byte[] ch=str1.getBytes(StandardCharsets.UTF_8);
类似printf的格式化输出,只不过此时不输出,只是将字符串按照指定格式转换:String.format(格式);
String str=String.format("%d-%d-%02d",2022,11,02);
System.out.println(str);
String repalaceAll(String regex,String replacecment)
:替换所有的指定内容
String replaceFirst(String regex,String replacement)
:替换首个内容
String substring(int beginIndex)
:从指定索引截取到结尾[start,end)
String substring(int index,int endIndex)
:截取部分内容[start,end)
//传入任意单词将其首字母转为大写
public static String firstUpperCase(String str)
{
//拿到首字母,将其转为大写之后和其他字符串进行拼接
return str.substring(0,1).toUpperCase()+str.substring(1);
}
String[] spilt(String regex)
:将字符串全部拆分(按照regex的格式进行拆分)
String[] spilt(String regex,int limit)
:将字符串以指定的格式,拆分为limit组(从头开始拆分到限定组后结束拆分)
举例:拆分一个IP地址,根据IP地址来判断用户的区域
String str="132.168.1.1";
//String[] ret=str.spilt(".");
String[] ret=str.spilt("\\.");
for(String s:ret)
{
System.out.println(s+" ");
}
结果无输出,因为操作符在Java中属于特殊字符。例如**引用操作符此类的字符都需要进行转义\ **。
默认只能去掉字符串左右空格,中间的空格保留
“ hello world ”=>"hello world"
使用replaceAll()将所有空格去除