String
String():无参构造
String(byte[] bytes):将字节数转换成字符串
Public String (byte[] bytes,int index,int length):将字节数组的一部分转化为字符串
Public String (char[] value):将字符转化成字符串
Public string (char[] value,int index,int count):将字符数组中的一部分转化为字符串
Public String(String original):将一个字符串常量构造成一个字符串对象
例如:
package com.TextDome1; public class StringDome1 { public static void main(String[] args) { String s=new String(); System.out.println("s:"+s); System.out.println("-----------------"); byte[] byt= {'I','l','o','v','e','u'}; String s1=new String(byt); System.out.println("s1:"+s1); String s2=new String(byt,1,4); System.out.println("s2:"+s2); System.out.println("----------"); char[] c= {'我','爱','迪','丽','热','巴'}; String s3=new String(c); System.out.println("s3:"+s3); String s4=new String(c,1,5); System.out.println("s4:"+s4); System.out.println("---------------"); String s5=new String("abc"); System.out.println("s5:"+s5); } } 运行结果如下: /** * s: * --------------- * s1:Iloveu * s2:love * --------------- * s3:我爱迪丽热巴 * s4:爱迪丽热巴 * --------------- * s5:abc */
以上便是String的主要构造方法,具体用法在例子中已经体现出来
String最大的特点就是当字符串被赋值后,就不能改变他的值
当String作为形式参数的时候,它的效果和实际类型是一样的,对实际参数没有什么影响。
例如:
package com.TextDome1; public class StringDome2 { public static void main(String[] args) { String str1="hello"; String str2="迪丽"; System.out.println("str1:"+str1+",str2:"+str2); System.out.println("-----------------"); change(str1,str2); System.out.println("str1:"+str1+",str2:"+str2); } public static void change(String s1,String s2) { s1+="world"; s2+="热巴"; } } 运行结果: /** *str1:hello,str2:迪丽 *----------------- *str1:hello,str2:迪丽 */
模拟用户登录账号示例:
package com.TextDome1; import java.util.Scanner; /** * @author 杰哥 *模拟用户登录三次 */ public class StringDome4 { public static void main(String[] args) { String username="radim"; String password="radim"; for(int x=0;x<3;x++) { Scanner sc=new Scanner(System.in); System.out.println("请您输入用户名"); String str1=sc.nextLine(); System.out.println("请您继续输入密码"); String str2=sc.nextLine(); if(str1.equals(username)&&str2.equals(password)) { System.out.println("恭喜您登录成功"); break; }else { if((2-x)==0) { System.out.println("请您尽快联系管理员解决"); }else { System.out.println("您还有"+(2-x)+"次机会"); } } } } }
猜字小游戏的示例:
package com.TextDome1; import java.util.Scanner; /** * @author 杰哥 *猜字小游戏 */ public class StringDome5 { private StringDome5() { } public static void method() { int num=(int)( Math.random()*100)+1 ; while(true) { Scanner sc=new Scanner(System.in); System.out.println("请输入您要猜的数"); int num1=sc.nextInt(); if(num1>num) { System.out.println("您猜的有点大了,继续猜"); }else if(num1<num) { System.out.println("您猜的有点小了,继续猜"); }else { System.out.println("恭喜您,终于猜对了"); break; } } } public static void main(String[] args) { StringDome5.method(); } }
String类的一些常用功能:
1)基本判断功能:
虽然很简单,看看就能懂,但是个人建议自己手打一遍巩固理解
/* boolean equals(Object obj):将此字符串与指定的对象比较
boolean equalsIgnoreCase(String str)将此 String 与另一个 String 比较,不考虑大小写
boolean contains(String str):判断当前大川中是否包含子字符串 (重点)
boolean startsWith(String str):以当前str字符串开头(重点)
boolean endsWith(String str):以当前str字符串结尾(重点)
boolean isEmpty():判断字符串是否为空
public String concat(String str):字符串的特有功能:拼接功能 和+拼接符是一个意思
package com.TextDome1; public class StringDome3 { public static void main(String[] args) { String s1="helloreba"; String s2="Helloreba"; System.out.println(s1.equals(s2)); System.out.println("--------------"); System.out.println(s1.equalsIgnoreCase(s2)); System.out.println("--------------"); System.out.println(s1.contains("reba")); System.out.println(s1.contains("baby")); System.out.println("---------------"); System.out.println(s1.startsWith("hell")); System.out.println(s1.endsWith("baby")); System.out.println("----------------"); System.out.println(s1.isEmpty()); System.out.println("---------------"); System.out.println(s1.concat(" nice")); } } 运行结果如下: /** * @author 杰哥 *false *-------------- *true *-------------- *true *false *--------------- *true *false *---------------- *false *--------------- *helloreba nice */
2)获取功能:
/**
* String类的常用获取功能:
*
* public int length():获取字符串的长度
* public char charAt(int index)返回指定索引处的 字符
* public int indexOf(int ch)返回指定字符在此字符串中第一次出现处的 索引
* 问题:既然传入的字符:这里为什么用int类型
* 'a'和97 都表示a
* public int indexOf(int ch,int fromIndex)返回在此字符串中第一次 出现指定字符处的索引,从指定的索引开始搜索。
* public int indexOf(String str)返回指定子字符串在此字符串中第一次 出现处的索引
* public int indexOf(String str,int fromIndex)回在此字符串中第一 次出现指定字符串处的索引,从指定的索引开始搜索。
package com.TextDome1; public class StringDome6 { public static void main(String[] args) { String str="abcdefcba"; System.out.println("length:"+str.length()); System.out.println("---------------"); System.out.println("charAt:"+str.charAt(3)); System.out.println("----------------"); System.out.println("index of:"+str.indexOf("c")); System.out.println("-----------------"); System.out.println("index of:"+str.indexOf("c", 4)); System.out.println("-----------------"); System.out.println("index of:"+str.indexOf("a")); System.out.println("------------------"); System.out.println("index of:"+str.indexOf("a",3)); System.out.println("-------------------"); } } 运行结果: /** * @author 杰哥 *length:9 *--------------- *charAt:d *---------------- *index of:2 *----------------- *index of:6 *----------------- *index of:0 *------------------ *index of:8 *------------------- */
3)截取功能
/**
* 截取功能
* public String substring(int beginIndex):从指定位置开始截取,默 认截取到末尾,返回新的字符串
* public String substring(int beginIndex, int endIndex):从指定 开始到指定位置末尾结束,包前不包含
*
package com.TextDome1; public class StringDome6 { public static void main(String[] args) { String str="abcdefcba"; System.out.println("substring:"+str.substring(3)); System.out.println("---------------"); System.out.println("substring:"+str.substring(3, 7)); } } 运行结果: /** * @author 杰哥 *substring:defcba *---------------- *substring:defc */
4)转换功能
/**
* String的常用转换功能:
*
* public byte[] getBytes() :将字符串转换为字节数组
* public char[] toCharArray() :将字符串转换成字符数组(重点)
* public static String valueOf(int i):将int类型的数据转换成字符 串(重点)
* 这个方法可以将任何类型的数据转化成String类型
* public String toLowerCase():转成小写
* public String toUpperCase():字符串中所有的字符变成大写
* public String concat():将两个字符串拼接在一起
*replace():是将字符串中的一个字符替换成另一个字符
*trim():是去除字符串两端的空格
package com.TextDome1; public class StringDome8 { public static void main(String[] args) { String str="JavaSE"; byte[] byt=str.getBytes(); for(int x=0;x<byt.length;x++) { System.out.print(byt[x]+","); } System.out.println("getBytes:"+byt); System.out.println("---------------"); char[] ch=str.toCharArray(); for(int i=0;i<ch.length;i++) { System.out.print(ch[i]+" "); } System.out.println("tochararrays:"+ch); System.out.println("---------------"); System.out.println(str.valueOf(3)); //这个3是字符串“3” System.out.println("----------------"); System.out.println(str.toLowerCase()); System.out.println("----------------"); System.out.println(str.toUpperCase()); String s1="hello"; String s2="world"; System.out.println("concat:"+s1.concat(s2)); System.out.println("---------------"); System.out.println(str.replace('a', 'A')); System.out.println("-----------------"); System.out.println(str.trim()); } } 运行结果: /** * @author 杰哥 *74,97,118,97,83,69,getBytes:[B@70dea4e *--------------------------- *J a v a S E tochararrays:[C@5c647e05 *------------------------- *3 *------------------------- *javase *------------------------- *JAVASE *------------------------ * concat:helloworld * ----------------------- * JAvASE * ----------------------- * JavaSE * */
CompareTo的理解:
package com.TextDome1; public class StringDome { public static void main(String[] args) { String s1="helloworld"; String s2="hello"; String s3="hello";//h的ASCII码是104 String s4="baby";//b的ASCII码是98 String s5="hello";//l的ASCII码是108 String s6="heabc";//a的ASCII码是97 System.out.println(s1.compareTo(s2)); System.out.println("------------"); System.out.println(s3.compareTo(s4)); System.out.println("--------------"); System.out.println(s5.compareTo(s6)); } } 运行结果为: /** * @author 杰哥 *5 *------------ *6 *------------- *11 */
根据上例可以得出compareTo的理解:
当两个字符串的如s1和s2一样,一个包含另一个的时候,输出的值是两者的长度差
当两个字符串的首字母相同,其他字母不同的时候,是第一个不同的字母的ASCII码之差
当两个字符串的首字母及部分字母相同时,找到不同字母,取第一个不同字母的ASCII码之差。