读书人

String种的使用(统计字符)

发布时间: 2013-07-09 09:50:47 作者: rapoo

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()函数对单独的某一个字符进行搜索。再利用循环提取字符串中的每一个字符。(整理后再添加)
?



?

?

读书人网 >编程

热点推荐