String类的使用(统计字符)


7月5日 基本数据类型和String类

1.Java的基本数据类型 Java的基本数据类型有8种                                 

                                             类型                 值域                   表示范围
整数类型:           byte        字节型               8bit                   -128~127                    

                              short      短整型              16bit                       

                                int          整型                32bit                    

                              long       长整型               64bit                 -2^n~2^n-1

浮点型:                float        单精度              32bit                  

                             double      双精度              64bit

布尔                    boolean    布尔类型          true和false

字符                      char        字符型               16bit

整数的转型:

       小范围的整数类型值可通过赋值运算直接转换为大范围的原始类型,从byte-short-char-int-long-float-double是可以自动转换。反之,由大范围的原始类型转换到小范围的类型(由精度高的转换为精度低的)则需要强制转换。示例代码如下:

public static void main(String[] args){

	byte a=123;
	int b=a;//由byte型到int型的自动转换
	a=(byte)b;//由byte型到int型的强制转换

}


注:   

 

   1、由精度高的类型转换为精度低的类型时,会失去精度,有可能造成数据的丢失。   

   2、char无法转化为short    3、在定义了变量的类型而未赋值时,每个类型都拥有一个默认值。如boolean类型的默认值为flase。int 一维数组的元素默认值为0。

2.String类的使用   

   1.String在Java中是类。      

      String表示的是字符串
   2.常用方法(整理后添加)          

       1、char charAt(int index) :取字符串中的某一个字符          

       2、int compareTo(String anotherString) :当前String对象与anotherString比较         

       3、String concat(String str) :将该String对象与str连接在一起。       

       4、boolean endsWith(String suffix) :该String对象是否以suffix结尾。     

       5、int indexOf(int ch) :只找第一个匹配字符位置     

       6、int length() :返回当前字符串长度。      

       7、String toLowerCase() :将字符串转换成小写。

 

注:   

    1、String在Java中是类,Java中只有类名的命名是每个单词的首字母大写,常量是每个字母均大写。

代码示例:统计字符串中每一个字符出现的次数
       

       思路一:使用两个循环,第一个循环,提取每一个索引位置的字符,第二个循环用来判断,对字符串进行搜索,搜索到相同的字符,则计数加1。


       运用的函数:   

    1、判断两字符串相等的函数:equals(Object anObject)   

    2、由于判断函数只能用于两个字符串之间的判断,故使用到了将字符变量转化为字符串变量的函数:String valueOf(char c)  

    3、提取指定的索引位置的字符的函数:charAt(int index)

代码示例:
 

public class StringCount1{

	/**
	 * 主函数,程序的入口
	 */

	public static void main(String[] args){

		//定义字符串变量
		String str1="euriyui3743289^%^&*&DJHK2312";
		
		//利用循环语句,依次获取字符串中每一个字符。
		
		for(int i=0;i<str1.length();i++){
			
			//获取指定的索引位置的字符
			
			char c1 = str1.charAt(i);
			
			String str2=new String();

			//将字符型转化为字符串的表达

			str2=String.valueOf(c1);
			System.out.println("索引"+i+"位置的字符是:"+str2);
				
			//利用循环语句,依次比较此后每个位置的字符是否与该字				//符相等

			//用k进行计数

			int k=0;
			for(int j=0;j<str1.length();j++){

				char c2=str1.charAt(j);
				String str3=String.valueOf(c2);

				//将字符型转化为字符串的表达

				if(str3.equals(str2)){
					k++;
				}
			}System.out.println("出现的次数是"+k);
			
		}
	}
}

 
出现的问题:     

 

       计数准确无误,但是却出现了重复。因为该程序对字符串中的每一个字符都进行了统计,而无论它在该位置之前是否出现过。

解决办法一:       

       利用数组和ascii码进行改写。


相关知识:       

       每个字符都有一个特定的ascii,字符在字符串中多次出现,但ascii码是相同的,运用ascii来统计,可以避免重复计数。       

       java中一维数组每个元素的默认值为0。

修改后的代码如下:
 

public class Change1{

	public static void main(String[] args){

		String str="igiwridsguwifyxhejhjjs";

		int[] array = new int[256];//数组定义格式
		// 定义一个数组进行计数
		for (int i = 0; i < str.length(); i++) {
			//str.length()为字符串长度
			// 获取指定索引位置的字符
			char c = str.charAt(i);
			// 将字符转换为对应的ascii
			int ascii = c;
			// 将对应的ascii位置的数组元素加1
			array[ascii]++;
		}

		// 输出
		for (int i = 0; i < array.length; i++) {
			// 如果统计个数不为0则输出
			if (array[i] != 0) {
				char c = (char) i;
				//强制转换
				System.out.println("字符" + c + "出现的次数是" + array[i]);
			}
		}
	}
}

 

解决办法二:      

 

       利用replace函数将统计过的字符全部替换为空。


相关知识:       

       replace函数可在大字符串中,进行字符或小字符串的替换。

修改后的代码如下:
 

public class Change2{

	public static void main(String[] args){
	//定义字符串变量
		String str1="euriyui3743289^%^&*&DJHK2312";
		
		//利用循环语句,依次获取字符串中每一个字符。
		
		
		for(int i=0;i<=str1.length()+1;i++){
			//i<=str1.length()+1,是为了计算最后一个字符(当单独仅剩下一个只出现一				//次的字符时)
			
			i=0;//修改后
			//获取指定的索引位置的字符
			
			char c1 = str1.charAt(0);
			
			String str2=new String();

			//将字符型转化为字符串的表达

			str2=String.valueOf(c1);
				
			//利用循环语句,依次比较此后每个位置的字符是否与该字						//符相等

			//用k进行计数

			int k=0;
			for(int j=0;j<str1.length();j++){

				char c2=str1.charAt(j);
				String str3=String.valueOf(c2);

				//将字符型转化为字符串的表达

				if(str3.equals(str2)){
					k++;					
				}
			}
			System.out.println("字符"+c1+"出现的次数是"+k);
			str1 = str1.replace(str2, "");			
		}
	}
}

 

思路二:
       运用indecOf()函数对单独的某一个字符进行搜索。再利用循环提取字符串中的每一个字符。(整理后再添加)
 



 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值