Scanner
* hasNextXxx() 判断是否还有下一个输入项,其中Xxx可以是Int,Double等。如果需要判断是否包含下一个字符串,则可以省略Xxx
* nextXxx() 获取下一个输入项。Xxx的含义和上个方法中的Xxx相同,默认情况下,Scanner使用空格,回车等作为分隔符
Scanner获取数据出现的小问题及解决方案
- A:两个常用的方法:
- public int nextInt():获取一个int类型的值
- public String nextLine():获取一个String类型的值
- B:案例演示
- a:先演示获取多个int值,多个String值的情况
- b:再演示先获取int值,然后获取String值出现问题
- c:问题解决方案
- 第一种:先获取一个数值后,在创建一个新的键盘录入对象获取字符串。
- 第二种:把所有的数据都先按照字符串获取,然后要什么,你就对应的转换为什么。(后面讲)
-
//创建两个scanner对象 //全用nextline方法
String类的概述
* a:字符串是常量,一旦被赋值,就不能被改变。 可以赋值新的字符串对象 原来指向的对象变成垃圾
String类的构造方法
- A:常见构造方法
- public String():空构造
- public 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):把字符串常量值转成字符串
class Normal1
{
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);
//输出abc
byte[] arr2={97,98,99,100,101,102};
String s3=new String(arr2,2,3);
System.out.println(s3);
//输出cde
char [] arr3={'a','b','c','d','e'};
String s4=new String(arr3);
System.out.println(s4);
//输出abcde
}
}
String类的常见面试题
-
1.判断定义为String类型的s1和s2是否相等
- String s1 = “abc”;
- String s2 = “abc”;
- System.out.println(s1 == s2);
- System.out.println(s1.equals(s2));
==基本数据类型比较值 引用数据类型比较地址值
equals参数不为null 且形同字符序列 为true
两个true abc在方法区的常量池内 池子里没有创建 有就不创建了
-
2.下面这句话在内存中创建了几个对象?
- String s1 = new String(“abc”);
创建两个对象 新创建的abc在常量池也算对象
- String s1 = new String(“abc”);
-
3.判断定义为String类型的s1和s2是否相等
- String s1 = new String(“abc”);
- String s2 = “abc”;
- System.out.println(s1 == s2);
- System.out.println(s1.equals(s2));
s1中的abc进入堆 是常量池的副本 s2的在常量池
false true
-
4.判断定义为String类型的s1和s2是否相等
- String s1 = “a” + “b” + “c”;
- String s2 = “abc”;
- System.out.println(s1 == s2);
- System.out.println(s1.equals(s2));
true true
java 编译时常量优化机制 类似byte b=3+4
-
5.判断定义为String类型的s1和s2是否相等
- String s1 = “ab”;
- String s2 = “abc”;
- String s3 = s1 + “c”;
- System.out.println(s3 == s2);
- System.out.println(s3.equals(s2));
false true
String类的判断功能
- A:String类的判断功能
- boolean equals(Object obj):比较字符串的内容是否相同,区分大小写
- boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
- boolean contains(String str):判断大字符串中是否包含小字符串
- boolean startsWith(String str):判断字符串是否以某个指定的字符串开头
- boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾
- boolean isEmpty():判断字符串是否为空。
class Normal1
{
public static void main(String[] args) {
String s1="我爱heima,哈哈";
String s2="heima";
String s3="baima";
String s4="我爱";
String s5="哈哈";
System.out.println(s1.contains(s2)); //true
System.out.println(s2.contains(s3));//false
System.out.println(s1.startsWith(s4));
System.out.println(s1.endsWith(s5));
System.out.println(s1.isEmpty());
//null不是空 ""是字符串常量 也是string类对象
//null空常量 不能调用任何方法
}
private static void demo()
{
String s1="heima";
String s2="heima";
String s3="HeiMa";
System.out.println(s1.equals(s2));
System.out.println(s2.equals(s3));
System.out.println(s2.equalsIgnoreCase(s3));
}
}
模拟登陆
package haha;
import java.util.Scanner;
public class Normal1 {
public static void main(String[] args) {
String sn="";
String sp="";
Scanner sc=new Scanner(System.in);
check a=new check();
for (int i = 0; i < 3; i++) {
System.out.println("请输入姓名");
sn=sc.nextLine();
System.out.println("请输入密码");
sp=sc.nextLine();
//注意一定是equals不要用==
if(sn.equals(a.getName())&&sp.equals(a.getPassword()))
{
System.out.println("登录成功");
break;
}
else
{
System.out.println("您还有"+(2-i)+"次机会");
}
}
}
}
class check
{
private String name="admin";
private String password="admin";
public String getName() {
return name;
}
public String getPassword() {
return password;
}
}
String类的获取功能
- A:String类的获取功能
- int length():获取字符串的长度。
- char charAt(int index):获取指定索引位置的字符
- int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引。
- int indexOf(String str):返回指定字符串在此字符串中第一次出现处的索引。
- int indexOf(int ch,int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引。
- int indexOf(String str,int fromIndex):返回指定字符串在此字符串中从指定位置后第一次出现处的索引。
- lastIndexOf
- String substring(int start):从指定位置开始截取字符串,默认到末尾。
- String substring(int start,int end):从指定位置开始到指定位置结束截取字符串。
class Normal1
{
public static void main(String[] args) {
String s1="woaiheima";
int index1=s1.indexOf('a',3);
//从3往后找 第一个a
System.out.println(index1);
//8
//lastIndexOf 从后向前找
//加上数从指定位置向前找
String index2=s1.substring(2);
System.out.println(index2);
//aiheima
String index3=s1.substring(2,4);
System.out.println(index3);
//ai 含头不含尾
}
public static void demo1()
{
// int[]arr={11,22,33};
// System.out.println(arr.length); 数组中length是属性
String s1="heima";
System.out.println(s1.length());
//5
String s2="你要减肥,造吗?";
System.out.println(s2.length());
//8
char c=s2.charAt(5);
System.out.println(c);
//造
}
public static void demo2()
{
String s1="heima";
int index=s1.indexOf('a');//97
System.out.println(index);
//4 如果不存在返回-1
int index3=s1.indexOf("ma");
System.out.println(index3);
//3
//注意一个string substring生成新的字符串
//原来的字符串没有任何改变
}
}
遍历字符
class Normal1
{
public static void main(String[] args) {
String s="heima";
for(int i=0;i<s.length();i++)
{
char c=s.charAt(i);
System.out.println(c);
}
}
}
统计不同类型字符个数
class Normal1
{
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("大写字符"+big+"个,小写字符"+small+"个,数字"+num+"个,其他字符"+other+"个。");
}
}
String类的转换功能
- A:String的转换功能:
-
byte[] getBytes():把字符串转换为字节数组。
-
char[] toCharArray():把字符串转换为字符数组。
-
static String valueOf(char[] chs):把字符数组转成字符串。
-
static String valueOf(int i):把int类型的数据转成字符串。
- 注意:String类的valueOf方法可以把任意类型的数据转成字符串
-
String toLowerCase():把字符串转成小写。(了解)
-
String toUpperCase():把字符串转成大写。
-
String concat(String str):把字符串拼接。
-
class Normal1
{
public static void main(String[] args) {
char[] arr={'a','b','c'};
String s=String.valueOf(arr);//静态方法类名调用 底层由string类构造方法完成
System.out.println(s);
String s2=String.valueOf(100);
System.out.println(s2+100);
//100100
}
public static void demo1()
{
String s1="abc";
byte[] arr=s1.getBytes();
for(int i=0;i<arr.length;i++)
{
System.out.println(arr[i]+"");
}
//97 98 99
String s2="你好你好";
byte[] arr2=s2.getBytes();
for(int i=0;i<arr2.length;i++)
{
System.out.println(arr2[i]+"");
}
//gdk 一个中文两个字节
}
public static void demo2()
{
String s="heima";
char[] arr=s.toCharArray();//字符串装换为字符数组
for(int i=0;i<arr.length;i++)
{
System.out.print(arr[i]+" ");
// h e i m a
}
}
}
class Normal1
{
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);
}
//链式编程 调用完方法 返回的是对象 就可以继续调用
}
class Normal1
{
public static void main(String[] args) {
//数组变成字符串
//输出结果"[1,2,3]"
int[] arr={1,2,3};
String s="[";
for(int i=0;i<arr.length;i++)
{
if(i==arr.length-1)
{
s=s+arr[i]+"]";
}
else{
s=s+arr[i]+",";
}
}
System.out.println(s);
}
}
String类的其他功能
- A:String的替换功能及案例演示
- String replace(char old,char new)
- String replace(String old,String new)
- B:String的去除字符串两空格及案例演示
- String trim()
- C:String的按字典顺序比较两个字符串及案例演示
- int compareTo(String str)(暂时不用掌握)
- int compareToIgnoreCase(String str)(了解)
class Normal1
{
public static void main(String[] args) {
String s="heimai";
String s2=s.replace('i','o');//用o替换全部的i
System.out.println(s2);
//heomao
String s4=s.replace("ei","ao");
System.out.println(s4);
//haomai
String s5=" hei ma";
String s6=s5.trim();
System.out.println(s6);
//hei ma 去除最前面空格
String a1="abc";
String a2="bcd";
int num=a1.compareTo(a2);
System.out.println(num);
//字典顺序比较 -1
}
}
逆序
import java.util.Scanner;
class Normal1
{
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);
}
}
class Normal1
{
public static void main(String[] args) {
//统计大串中小串次数
String max="woaiheima,heimabutongyubaima,wulunheimahaishibaima,zhaodaogongzuojiushihaoma";
String min="heima";
int count=0;
int index=0;
while((index = max.indexOf(min))!=-1)
{
count++;//计数器自增
max=max.substring(index+min.length());
}
System.out.println(count);
}
}
package haha;
public class test {
public static void main(String[] args) {
String a ="ab";
String b ="a"+"b";
String c ="a";
String d ="b";
String e =c+d;
System.out.println(a==b);
System.out.println(a==e);
System.out.println(b==e);
/*true
false
false*/
}
}