String

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在常量池也算对象
  • 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*/
            
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值