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