String类

**

一:String类概述及其构造方法

**
1:String类概述
字符串是由多个字符组成的一串数据(字符序列)
字符串可以看成是字符数组
2:构造方法
public String()
public String(byte[] bytes)
public String(byte[] bytes,int offset,int length)
public String(char[] value)
public String(char[] value,int offset,int count)
public String(String original)

二:String类的特点及面试题

**字符串是常量,它的值在创建之后不能更改**

1:String s = “hello”; s += “world”; 问s的结果是多少?// helloworld
在这里插入图片描述

2:面试题

	String s1 = new String(“hello”)和String s2 = “hello”;的区别?
	***s1.equals(s2)结果为true***及内容相同
	***s1 == s2结果为false***         及地址值不相同
	前者会创建两个(或者一个对象,是因为常量区已经有了该内容),后者创建一个对象

在这里插入图片描述

三:String类的功能

	**1:判断功能**

boolean equals(Object obj)
判断字符串内容是否相同,区分大小写

boolean equalsIgnoreCase(String str)
判断字符串内容是否相同,忽略大小写

boolean contains(String str)
判断大字符串是否包含小字符串

boolean startsWith(String str)
判断字符串是否以某个指定的字符串开头

boolean endsWith(String str)
判断字符串是否以某个指定的字符串开头

boolean isEmpty()
判断字符串内容是否为空
案例:用户登录判断

package itcast_02;

import java.util.Scanner;

public class User {
	
		private String username = "admin";
		private String password = "admin";
		
		public User(){}
		public void login(){
			
		Scanner sc = new Scanner(System.in);
		
		for(int i = 0;i < 3;i++){
			System.out.println("请输入用户名:");
			String name = sc.nextLine();
			System.out.println("请输入密码:");
			String pwd = sc.nextLine();
		
			if (name.equals(username) && pwd.equals(pwd)){
				System.out.println("登录成功!可以玩游戏了");
				GuessNumberGame.start();//调用GuessNumberGame中静态start方法
				break;
			}
			else{
				if((2-i) == 0)
					System.out.println("你没有登录机会了,拜拜!");
				
				else
					System.out.println("登录失败!还有" + (2-i) +"次机会");
			}	
		
		}
		}
		
	
}

	2:String类的获取功能

int length()
获取字符串长度

char charAt(int index)
获取指定索引位置的字符

int indexOf(int ch)
返回指定字符在此字符串中第一次出现的位置索引,int类型‘a’和97都代表‘a’,为了方便

int indexOf(String str)
返回指定字符串在此字符串中第一次出现的位置索引

int indexOf(int ch,int fromIndex)
返回指定字符在此字符串中从指定位置后第一次出现的位置索引

int indexOf(String str,int fromIndex)
返回指定字符串在此字符串中从指定位置后第一次出现的位置索引

String substring(int start)
从指定位置开始截取字符串到最后

String substring(int start,int end)
从指定位置开始截取字符串到规定位置,返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex

案例:遍历字符串中大写字母、小写字母、数字的个数

public class StringTest2 {
	/*@Test		//单元测试
	public void test(){
	String s = "HelloWorld2019";
	int bigcount = 0;
	int smallcount = 0;
	int numbercount = 0;
	char ch;
	for(int i = 0;i < s.length();i++){
		ch = s.charAt(i);
		if(ch >= '0'&&ch <= '9') numbercount++;
		if(ch >= 'a'&&ch <= 'z') smallcount++;
		if(ch >= 'A'&&ch <= 'Z') bigcount++;
		}
	System.out.println(numbercount+" "+smallcount+" "+bigcount);
	}*/
	
	public static void main(String[] args) {//主类测试
		String s = "HelloWorld2019";
		int bigcount = 0;
		int smallcount = 0;
		int numbercount = 0;
		char ch;
		for(int i = 0;i < s.length();i++){
			ch = s.charAt(i);
			if(ch >= '0'&&ch <= '9') numbercount++;
			if(ch >= 'a'&&ch <= 'z') smallcount++;
			if(ch >= 'A'&&ch <= 'Z') bigcount++;
			}
		System.out.println(numbercount+" "+smallcount+" "+bigcount);
	}
		
}
3:String类的转换功能

byte[] getBytes()//把字符串转换为字节数组
char[] toCharArray()//把字符串转换为字符数组
static String valueOf(char[] chs) //String类的valueOf可以把任何类型的数据转换为字符串
static String valueOf(int i)
String toLowerCase() //把 字符串转换为小写字母
String toUpperCase() //把 字符串转换为大写字母
String concat(String str)//字符串拼接

	例题1:将字符串首字母大写,其他的字母小写
//将字符串首字母大写,其他的字母小写
public class StringTest4 {
public static void main(String[] args) {
	String s = "HELLOWorld11111";
	/*现获取第一个字符
	返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,
	直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex。 */
	String  s1 = s.substring(0,1);//0到(1-1)及   0到0处字符
	
	//获取除第一个字符之外的字符串
	String s2 = s.substring(1);
	
	
	//将第一个字符大写
	String s3 = s1.toUpperCase();
	
	//讲其他字符小写
	String s4 = s2.toLowerCase();
	String s5 = s3 + s4;
	 System.out.println(s5);
	 
	 //优化方法
	 String s6 = s.substring(0,1).toUpperCase() + s.substring(1).toLowerCase();
	 System.out.println(s6);
	 
	 
}
}

	4:String类的其它功能
替换功能

String replace(char old,char new)
String replace(String old,String new)

去除字符串两空格	

String trim()//去除字符串前后两个空格(有空格的话)

按字典顺序比较两个字符串  

int compareTo(String str)
如果参数字符串等于此字符串,则返回值 0;如果此字符串按字典顺序小于字符串参数,则返回一个小于 0 的值;如果此字符串按字典顺序大于字符串参数,则返回一个大于 0 的值。及compareTo 返回这两个字符串在位置 k 处两个char 值的差,即值: this.charAt(k)-anotherString.charAt(k)

int compareToIgnoreCase(String str) //同上但是不考虑大小写
compare原码

 public int compareTo(String anotherString) {
        int len1 = value.length;		//this.toCharArray().length
        int len2 = anotherString.value.length;   //anotherString.toCharArray().length
        int lim = Math.min(len1, len2);    //选出短的那个长度
        char v1[] = value;
        char v2[] = anotherString.value;

        int k = 0;
        while (k < lim) {
            char c1 = v1[k];
            char c2 = v2[k];
            if (c1 != c2) {
                return c1 - c2;
            }
            k++;
        }
        return len1 - len2;
    }

案例1

//**按字典顺序作比较两个字符串**
public class StringTest5 {
public static void main(String[] args) {
	String s = "hello";
	String s1 = "hel";
	String s2 = "aorld";
	
	/*如果没有字符不同的索引位置,则较短字符串的字典顺序在较长字符串之前。
	在这种情况下,compareTo 返回这两个字符串长度的差,即值: 
	 this.length()-anotherString.length()*/

	System.out.println(s.compareTo(s1));//结果2
	
	System.out.println(s1.compareTo(s));//结果-2
	
	/*如果它们在一个或多个索引位置上的字符不同,假设 k 是这类索引的最小值;
	则在位置 k 上具有较小值的那个字符串(使用 < 运算符确定),其字典顺序在其他字符串之前。
	在这种情况下,compareTo 返回这两个字符串在位置 k 处两个char 值的差,即值: 

	 this.charAt(k)-anotherString.charAt(k)*/

	
	System.out.println(s.compareTo(s2));//结果7
}
}

案例2:遍历字符串的两种方法
1:length()和charAt()方法结合
2:将字符串转化为字符数组

//**将字符串反转**
//将一个字符串反转输出
import java.util.Scanner;

public class StringTest1 {
public static void main(String[] args) {
	String line ;
	Scanner sc = new Scanner(System.in);
	System.out.println("请输入字符串:");
	line = sc.nextLine();
	String result = StringTest1.reverse(line);
	System.out.println("反转后的结果为" + result);
	String result1 = StringTest1.reverse(line);
	System.out.println("反转后的结果为" + result1);
}


/*遍历字符串得到每一个字符方法
 * 1:length()和charAt()方法结合
 * 2:将字符串转化为字符数组
 * */

//方法一
public static String reverse(String line){
	String result = "";
	char[] ch = line.toCharArray();
	
	for(int i = line.length() - 1;i >= 0;i--){
		 result += ch[i];
		
	}
	return result;
}

//方法二
public static String reverse1(String line){
	String result = "";
	
	for(int i = line.length() - 1;i >= 0;i--){
		char ch = line.charAt(i);
		 result += ch;
		
	}
	return result;
}

}

案例3 小字符串在大字符串中出现的次数
在这里插入图片描述

/*
 * 小字符串在大字符串中出现的次数
 * A:定义一个统计变量,初始化值为0;
 * B:先在大串中查找小串第一次出现的位置
 * 		a:索引是-1,说明不存在,就返回统计变量
 * 		b:索引不是-1,说明存在,统计变量++
 * C:把刚才索引+小串的长度作为开始位置截取上一次的大串,返回一个新的字符串,并把该字符串的值重新赋值给大字符串
 * D:回到B
*/
public class StringTest2 {
public static void main(String[] args) {
	String maxstring = "wobuxihuanjavawozhendebuxihuanjavabiewenwoweishenmobuxihuanjava";
	String minstring = "java";
	
	int getcount = StringTest2.getcount(maxstring, minstring);
	
	System.out.println("java在大字符串中出现了"+getcount+"次");
	
	
}
public static int getcount(String maxstring,String minstring){
	int count = 0;
	int index = maxstring.indexOf(minstring);
	
	
	while(index != -1){
		count ++;
		int startindex = index + minstring.length();
		maxstring = maxstring.substring(startindex);
		 index = maxstring.indexOf(minstring);
	}
	return count;
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值