String类的使用(统计字符)
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);// 将字符转换为对应的asciiint ascii = c;// 将对应的ascii位置的数组元素加1array[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()函数对单独的某一个字符进行搜索。再利用循环提取字符串中的每一个字符。(整理后再添加)
?
?
?