String方法
构造方法:
String s="";
- 1、String(char[] arr)字符数组
s=new String(arr);
- 2、String(char[] arr,int index,int count) 截取arr从index开始,长度为count个
s=new String(arr,1,3);
- 3、String(byte[] bytes)
s=new String(new byte[]{‘1’,‘5’,‘8’})
- 4、String(byte[] bytes, int offset, int length)
参考2 从offset截取,长度为length个
-
5、String(byte[] bytes, String charsetName) -------------------处理编码问题
String s=“HelloWorldAndorid”;
byte[] b= s.getBytes("utf-8");//加密 System.out.println(Arrays.toString(b));//和s的值一样 String ss=new String(b,"utf-8");//解密
String的查找方法:
char charAt(int index)
int indexOf(int ch) //ch可以写int也可以写char:s.indexOf(‘a’)
int indexOf(String str) //s.indexOf(“ca”),返回的是c的地址
int indexOf(int ch,int fromIndex) //查找ch,从下标为fromindex开始找
int indexOf(String str,int fromIndex)//查找str,从下标Fromindex开始
int lastIndexOf(int ch) int lastIndexOf(int ch,int fromIndex) //从右往左查ch字符
int lastIndexOf(String str,int fromIndex) //从int开始,右往左查返回str首字母
String substring(int start)//子串5-最后:s.substring(5)
String substring(int start,int end)//子串下标第五个到dishi12ges.substring(5,12)
int length()
String的boolean类型方法:
boolean isEmpty():判断字符串是否为空。
boolean equals(Object obj):将此字符串的内容与指定的对象比较,区分大小写。
boolean equalsIgnoreCase(String str):将此 String 与另一个 String 比较,忽略大小写。
boolean contains(String str):判断字符串中是否包含方法传入的字符串。
String s=“jdAcasadsadcaaf”;
System.out.println(s.contains(“jd”));//返回true
boolean startsWith(String str):判断字符串是否以某个指定的字符串开头。
System.out.println(s.startsWith(“jdA”));//返回true
boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾。
String的正则表达式
Boolean matches(String regex)
String src = "aaaxyz123aaa";
String regex = "a{3}\\w{3}\\d{3}a{3}";
System.out.println(src.matches(regex));//返回true
replaceFirst(String regex, String s)//替换函数,将第一个regex换成s
String src = "aaaxyz123aaa";
regex = "a{3}";
System.out.println(src.replaceFirst(regex, "X"));//打印结果:Xxyz123aaa
replaceAll(String regex, String s)//替换函数,将所有regex换成s
String src = "aaaxyz123aaa";
regex = "a{3}";
System.out.println(src.replaceAll(regex, "X"));//Xxyz123X
分割字符串另一:String[] split(String regex)
src = "aaa253xyz123aaa";
regex = "\\d{3}";
String[] strs = src.split(regex);//strs是:[aaa, xyz, aaa]
System.out.println(Arrays.toString(strs));//打印字符串数组
String类型转换为数组/String
byte[] getBytes() :将字符串转化为字节数组。
byte[] bt=s.getBytes();
char[] toCharArray(): 将字符串转化为字符数组。
char[] c=s.toCharArray();
static String valueOf(char[] chs):将 char 数组转化为String
String s1=String.valueOf(c);
static String valueOf(int i) :将int转化为String
String s1=String.valueOf(1)
String toLowerCase() :将此 String 中的所有字符都转换为小写。
s.toLowerCase()
String toUpperCase() :将此 String 中的所有字符都转换为大写。
s.toLowerCase()
String concat(String str): 将指定字符串连接到此字符串的结尾。
String s1=“ask”;
String s2=“zxcf”;
System.out.println(s1.concat(s2));
替换比较分割方法
String replace(char old,char new) :字符替换功能。
s1.replace('a', 'h')
String replace(String old,String new) :字符串替换功能。
String trim():去除字符串首尾两空格。
String s2=" zxcz xca f ";
s2.trim()//zxcz xca
int compareTo(String str) :按字典顺序比较两个字符串。注意asde<ase 因为只比较到第三个
"asde".compareTo("ase") 返回-1
int compareToIgnoreCase(String str):按字典顺序比较两个字符串,忽略大小写。
public String[] split(String regex):分割字符串成字符数组,返回的是String数组。
String s3="45-87-96-54";
String s[]=s3.split("-");//["45","87","96","54"]
String格式化方法以及join
static String format(Locale l, String format, Object… args)
使用指定的区域设置,格式字符串和参数返回格式化的字符串。
static String format(String format, Object… args)
使用指定的格式字符串和参数返回格式化的字符串。
System.out.format(“大家好我叫做%s,我今年%d,我的性别是%c,我的爱好是%s”, “张三”, 18, ‘男’, “打羽毛球”);
static String join(CharSequence delimiter, CharSequence[] elements) 第一个为分隔符,后面的是元素
String join = String.join("_", “/”, “World”, “Java”);
System.out.println(join);
运行结果:/_World_Java
字符串拼接
1. plus方式
当左右两个量其中有一个为String类型时,用plus方式可将两个量转成字符串并拼接。
String a="";
int b=0;
String c=a+b;
2. concat方式
当两个量都为String类型且值不为null时,可以用concat方式。
String a=“a”;
String b=“b”;
String c= a.concat(b);
理论上,此时拼接效率应该最高,因为已经假定两个量都为字符串,做底层优化不需要额外判断或转换,而其他方式无论如何优化,都要先走到这一步。
3. append方式
当需要拼接至少三个量的时候,可以考虑使用StringBuffer#append()以避免临时字符串的产生
StringBuffer buf=new StringBuffer()
buf.append(“a”);
if(someCondition){
buf.append(“b”);
}
buf.append(“c”);
String d=buf.toString();
当a,b,c拼接起来会很长时,可以给在构造器中传入一个合适的预估容量以减少因扩展缓冲空间而带来的性能开销。
String习题:
小案例:
//“如果你想赢,这都不算什么,如果你想赢 ,爱丽丝的将来aslf 如果你想赢 啊哈哈a收到了”
找出上句话有几个你想赢:
方法一:
public class StrSub {
public static void main(String[] args) {
// TODO Auto-generated method stub
String s="如果你想赢,这都不算什么,如果你想赢 ,爱丽丝的将来aslf 如果你想赢 啊哈哈a收到了";
int len=0;
int num=0;
String sub="你想赢";
while((len=s.indexOf(sub,len))!=-1){
num++;
len=len+sub.length();
}
System.out.println(num);
}
}
方法二:
int index = 0;
int temp = 0;
while ((temp = str1.indexOf(str2)) != -1) {//先把str1。index赋值给temp,在判断temp是否等于-1(如果找不到返回-1)
index ++;
str1 = str1.substring(temp + str2.length());//截取新的字符串,这里的话str1不包含重复子串 举个例子:
//我要找shfoilaaaasdkl中的aa串 如果str1只加1的话aa串会找到3个
System.out.println(str1);
}
System.out.println("该字符串的个数是: " + index + " 个");
2、把字符串的首字母转大写,其他字母转小写,同时将每个字符使用_下划线隔开
例如:
原字符串:youAreWelcome
转换后字符串:Y_o_u_a_r_e_w_e_l_c_o_m_e
public class String_04 {
public static void main(String[] args) {
String s="youAremySunshine";
String news=s.substring(0, 1).toUpperCase().concat(s.substring(1).toLowerCase());
System.out.println(news);
//System.out.println(String.join("_", news));//利用求单子串拼接法,再结合jion(标签,数组元素),实现标签插入
String[] arrs=news.split("");
System.out.println(Arrays.toString(arrs));
System.out.println(String.join("_", arrs));
}
}
3、 键盘输入未来的某年某月某日,计算距离未来还有多少天?
public static void main(String[] args) throws Exception {
function();
}
public static void function() throws Exception{
//手动录入时间原点,为字符串型
System.out.println("请输入要求的日期原点,格式为 YYYY-MM-dd");
String birthday = new Scanner(System.in).next();
//用SimpleDateFormat()方法,定义对象,定义格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//利用parse方法()将String----Date日期对象
//parse()方法,需要在函数前加入Throws Exception
Date birthdate = sdf.parse(birthday);
//利用Date()获得当前操作系统的日期
Date today = new Date();
//将输入的日期和操作系统的今天日期,利用getTime()方法,换成ms进行运算
long dateSecond = birthdate.getTime();
long todaySecond = today.getTime();
//计算两者日期的ms差值,再换成天数
long diffSecond = (todaySecond-dateSecond);
System.out.println(diffSecond /1000 /60 /60 /24);
}