Scanner
一个可以使用正常表达式来解析基本类型的字符串的简单文本扫描器
一般方法:
hasnextXxx():判断是否还有下一个输入项,其中Xxx可以是int。double等类型
如果需要判断是否包含下一个字符串,则可以省略Xxx
nextXxx():获取下一个输入项,Xxx的含义和上个方法Xxx相同,默认情况下,Scanner
使用空格,回车等作为分隔符
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
package tan.jung.scanner; import java.util.Scanner; public class demo1_scanner { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc =new Scanner(System.in); // int i=sc.nextInt(); // System.out.println(i); if (sc.hasNextInt()) { int i=sc.nextInt(); System.out.println(i); }else{ System.out.println("错误的类型"); } } }
Scanner获取数据出现小数点问题
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
package tan.jung.scanner; import java.util.Scanner; public class demo2_scanner { public static void main(String[] args) { /* * 解决方案 * 1.创建两次对象,但是浪费空间 * 2.键盘录入的都是字符串,都用nextLine()方法 * */ Scanner sc =new Scanner(System.in); int i=sc.nextInt(); Scanner sc2 =new Scanner(System.in); String line=sc2.nextLine(); System.out.println(i); System.out.println(line); } }
String类型
字符串面值“” 也可以看成一个字符串。
字符串是常量,一旦被赋值,就不能被改变。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
package tan.jung.string; public class demo1_Stirng { public static void main(String[] args) { String str ="abc"; //abc可以看成一个字符串 str ="acc"; //当acc赋值给str,原来的abc就变成了垃圾 System.out.println(str.toString()); //string类重写了tostring方法返回的是该对象本身 } }
String构造方法
package tan.jung.string; public class demo2_Stirng { /* public stirng():空构造 * public stirng(byte[] bytes):把字节数组转成字符串 * public stirng(byte[] bytes,int index,int length):把字节数组的一部分转成字符串 * public stirng(char[] value):把字符数组转成字符串 * public stirng(char[] value,int index,int length):把字符数组的一部分转成字符串 * public stirng(String original):把字符串常量转成字符串 * */ public static void main(String[] args) { String s1=new String(); System.out.println(s1); byte[] arr1={97,98,99}; String s2=new String(arr1); //解码 System.out.println(s2); byte[] arr2={100,101,102}; String s3=new String(arr2,1,2); //将arr2字节数组从1索引开始转换2个 System.out.println(s3); char data[]={'a','b','c','d','e'};//将字符数组转换成字符串 String s4=new String(data); System.out.println(s4); String s5=new String(data, 1, 2); System.out.println(s5); String s6=new String("heima"); System.out.println(s6); } }
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
package tan.jung.string; public class demo3_String { public static void main(String[] args) { // demo1(); //demo2(); //demo3(); //demo4(); demo5(); } private static void demo5() { String s1="ab"; String s2="abc"; String s3=s1+"c";//任何字符串与数据用“+”相连接,都会产生新的字符串 System.out.println(s3==s2); //false System.out.println(s3.equals(s2));//true } private static void demo4() { String s1="a"+"b"+"c"; String s2="abc"; System.out.println(s1==s2); //true java中有常量优化机制 System.out.println(s1.equals(s2));//true } private static void demo3() { String s1=new String("abc");//堆内存对象的地址值 String s2="abc"; //常量池中的地址值 System.out.println(s1==s2); //false System.out.println(s1.equals(s2));//true } private static void demo2() { String s1=new String("abc"); System.out.println(s1); //创建了两个对象,一个在常量池,一个在堆内存 } private static void demo1() { //常量池中没有这个字符串对象,就穿件一个,如果有直接用 String s1="abc"; String s2="abc"; System.out.println(s1==s2); //true System.out.println(s1.equals(s2));//对象相同时才能true } }
String判断功能
“ ”和null区别
“ ”是字符串常量,同是也是一个String类的对象,既然是对象淡然可以调通String泪中的方法
null是空常量,不能调用任何的方法,否则会出现空指针异常,null常量可以给任意的引用数据类型赋值
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
package tan.jung.string; public class demo4_String { /* boolean equals(object obj):比较字符串的内容是否相同,区分大小写 * boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写 * boolean contains(String str):判断大写字符串是否包含字符串 * boolean startsWith(String str):判断字符串是否以某个指定的字符串开头 * boolean endWith(String str):判断字符串是否以某个指定的字符串结尾 * boolean isEmpty():判断字符串是否为空 * */ public static void main(String args[]) { //demo1(); //demo2(); String s1="heima"; String s2=null; System.out.println(s1.isEmpty()); System.out.println(s2.isEmpty()); } private static void demo2() { String s1="我爱xuexi"; String s2="xuexi"; String s3="我爱buxuexi"; String s4="我爱"; String s5="xuexi"; System.out.println(s1.contains(s2));//判断是否包含传入的字符串 System.out.println(s1.contains(s3)); System.out.println("-------------"); System.out.println(s1.startsWith(s4));//判断是否以传入的字符串开头 System.out.println(s1.startsWith(s5)); System.out.println("-------------"); System.out.println(s1.endsWith(s5));//判断是否以传入的字符串结尾 System.out.println("-------------"); } private static void demo1() { String s1="heima"; String s2="HEIMA"; System.out.println(s1.equals(s2)); System.out.println(s1.equalsIgnoreCase(s2)); } }
模拟登陆
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
package tan.jung.test; import java.util.Scanner; public class test1 { /*模拟登陆 * * */ public static void main(String[] args) { Scanner sc =new Scanner(System.in);//创建键盘录入对象 for (int i = 0; i < 3; i++) { System.out.println("请输入用户名"); String username=sc.nextLine(); //将键盘录入的用户名存储在username中 System.out.println("请输入密码:"); String password=sc.nextLine(); //将键盘录入的密码存储在password中 if("12345".equals(username) && "12345".equals(password)){ System.out.println("欢迎"+username+"登陆"); break; }else{ if (i==2) { System.out.println("你的错误次数已到,请明天再来"); } System.out.println("录入错误,还有"+(2-i)+"次机会"); } } } }
String获取功能
package tan.jung.string; public class demo5_String { /* int length():获取字符串的长度 * char charAt(int index):获取指定索引位置的字符 * int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引 * int indexOf(String str):返回指定字符在此字符串中第一次出现处的索引 * int indexOf(int ch,int formIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引 * int indexOf(String str,int formIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引 * lastIndexOf * String substring(int start):从指定位置开始截取字符串,默认到末尾 * String substring(int start,int end):从指定位置开始到指定位置结束截取字符串 * */ public static void main(String[] args) { //demo1(); //demo2(); //demo3(); //demo4(); //demo5(); String s="heima"; s.substring(4); //subString会产生一个新的字符串,需要将新的字符串记录 System.out.println(s.substring(0)); } private static void demo5() { String s1="woaixuexi"; String sub=s1.substring(4); System.out.println(sub); String s2=s1.substring(0, 4); //包含头,不包含尾 System.out.println(s2); } private static void demo4() { String s1="woaixuexi"; int index=s1.lastIndexOf('i'); System.out.println(index); } private static void demo3() { String s1="woaixuexi"; int index1=s1.indexOf('i', 4); //从指定位置开始向后找 System.out.println(index1); } private static void demo2() { String s1="heima"; int index=s1.indexOf("a"); //参数接收的类型会自动提升 System.out.println(index); int index2=s1.indexOf('z'); System.out.println(index2); //不存在就返回-1 int index3=s1.indexOf("ma"); System.out.println(index3); //获取字符串第一个字符出现的位置 } private static void demo1() { int [] arr={1,2,3}; System.out.println(arr.length); //数组中的length是属性 String s1="heima"; System.out.println(s1.length()); String s2="我热爱学习"; System.out.println(s2.length()); char c=s2.charAt(2); System.out.println(c); } }
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
package tan.jung.test; public class test3 { public static void main(String[] args) { String s="ABCDEabcd123456!@#$%^"; int big=0; int small=0; int num=0; int other=0; for (int i = 0; i < s.length(); i++) { char c=s.charAt(i); //通过索引获取每一个字符 if(c>='A' && c<='Z'){ big++; //如果猫族是大写字母,就让对其的变量自增 }else if (c>='a' && c<='z') { small++; }else if(c>='0' && c<='9'){ num++; }else { other++; } } System.out.println(s+"中大写子母有:"+big); System.out.println(s+"中小写子母有:"+small); System.out.println(s+"中数字有:"+num+",其他字符"+other); } }
String类的转换功能
package tan.jung.string; public class demo6_String { /* byte[] getBytes():把字符串转换为字节数组 demo1 * char[] toCharArray():把字符串转换为字符数组 demo2 * Static String valueOf(char[] chs):把字符数组转成字符串 demo3 * static String valueOf(int i):把int类型的数据转成字符串 demo3 * Sting类的valueOf方法可以把任意类型的数据转成字符串 * * String toLowerCase():把字符串转成小写 * String toUpperCase():把字符串转成大写 * String concat(String str):把字符串拼接 * */ public static void main(String[] args) { //demo1(); //demo2(); //demo3(); String s1="ABCDEFG"; String s2="abcdeg"; String s3=s1.toLowerCase(); String s4=s2.toUpperCase(); System.out.println(s3); System.out.println(s4); System.out.println(s3.concat(s4)); } private static void demo3() { char[] arr={'A','B','C'}; String s=String.valueOf(arr); System.out.println(s); String i=String.valueOf(100); //将100转换成字符串 System.out.println(i+","+100); person p1=new person("小谭",23); System.out.println(p1); String s3=String.valueOf(p1); //调用的是对象的toString方法 System.out.println(s3); } private static void demo2() { String s="heima"; char[] arr=s.toCharArray(); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]+" "); } } private static void demo1() { String s2="你我爱你"; byte[] arr2=s2.getBytes(); //通过gbk码表将字符串转换成字节数组 for (int i = 0; i < arr2.length; i++) { //编码:把我们看得懂转换成计算机看得懂的 System.out.print(arr2[i]+" "); //gbk码表一个中文代表两个字节 gbk码表特点,中文的第一个字节肯定是负数 } } } //第二个包 package tan.jung.string; public class person { private String name; private int age; public person() { super(); // TODO Auto-generated constructor stub } public person(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "person [name=" + name + ", age=" + age + "]"; } }
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
public class test2 { public static void main(String[] args) { String s="WOAIHEIMA"; String s2=s.substring(0, 1).toUpperCase().concat(s.substring(1).toLowerCase()); System.out.println(s2); } }
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
public class test2 { public static void main(String[] args) { int [] arr={1,2,3}; String s="["; for (int i = 0; i < arr.length; i++) { if (i==arr.length-1) { //3-1 2-1 1-1 =0=i; s=s+arr[i]+"]"; }else{ s=s+arr[i]+","; } } System.out.println(s); } }
String替换
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
public class demo7_String { public static void main(String[] args) { String s ="heima"; String s2=s.replace('i', 'a'); System.out.println(s2); String s3=s.replace("ei", "ao"); System.out.println(s3); } }
String去除字符串两空格
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
public class demo7_String { public static void main(String[] args) { String s1=" hei ma "; String s2=s1.trim(); System.out.println(s2); } }
String按字典顺序比较两个字符串
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 public class demo7_String { 2 3 public static void main(String[] args) { 4 String s1="我"; 5 String s2="爱"; 6 int num=s1.compareTo(s2); 7 System.out.println('我'+0); 8 System.out.println('爱'+0); 9 System.out.println(num); 10 11 12 String s5="heima"; 13 String s6="HEIMA"; 14 int num2=s5.compareTo(s6); 15 System.out.println(num2); 16 17 int num3=s5.compareToIgnoreCase(s6); 18 System.out.println(num3); 19 } 20 21 }
字符串反转
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
package tan.jung.test; import java.util.Scanner; public class test4 { public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("请输入字符串"); String line=sc.nextLine(); char[] arr=line.toCharArray(); String s=""; for (int i = arr.length-1; i >=0; i--) { s=s+arr[i]; } System.out.println(s); } }