基本字符操作(四)
本文通过一些实例,介绍了与字符串有关的数值转换、字节数组转换和格式化字符串。读者若想查阅其他类型的操作,可参考以下博客。
两个字符集合间的对比:
https://blog.csdn.net/Atishoo_13/article/details/82667128
相加、比较、包含和替换:
https://blog.csdn.net/Atishoo_13/article/details/82807560
输入、ASCII码和汉字内码的回显
https://blog.csdn.net/Atishoo_13/article/details/82628698
1.输入一个字符型数值串,将此字符串四舍五入后转化为整型数值。
- 在JAVA中如果将一个浮点数强制类型转换为一个整数时,JAVA是不会进行四舍五入操作的,而是直接将浮点数的小数部分全部删除。关于四舍五入的数值计算问题以下方法进行解决:在强制转换之前,首先计算了i+0.5的值。这样,如果i的小数部分是大于等于0.5的,加法运算就会让i的整数部分加1,否则则不会,然后再次对i进行强制类型转换为int,这时候得到的就是四舍五入后的值。
代码:
public class rw20 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "999.99"; //输入数值字符串
double i =Double.parseDouble(str);//将字符串转化为双精度浮点数
int intValue=0;
intValue =(int)(i+0.5);//此运算相当于四舍五入
System.out.println("字符串为:"+str+"\n四舍五入转化整型数值为:"+intValue);
}
}
编译结果如下图所示:
运行结果如下图所示:
2.操作包括字符串与字节数组之间的相互转换。
- 我们都知道,在Java里byte类型是占用1个字节,即8位的,而16进制的字符占用4位,所以每个byte可以用两个字符来表示,反之亦然。
- 举个例子
byte = 123
用二进制表示:0111 1011
每4位用字符表示: 7 b
代码:
import com.mysql.cj.util.StringUtils;
public class rw21 {
public static void main(String[] args) {
// TODO Auto-generated method stub
byte[] bytes={(byte)0xB8,(byte)0xDF,(byte)0xCB,(byte)0xD9};//设定字节数组
System.out.println("需转换的字节数组为:"+bytes);
String s1=toHexString(bytes);//调用的方法进行替换
System.out.println("字节数组转换为字符串后得:"+s1);
String s3="我爱学JAVA";//设定字符串
System.out.println("需转换的字符串为:"+s3);
byte[] s4=toByteArray(s3);
System.out.println("字符串转换为字节数组后得:"+s4);
}
public static String toHexString(byte[] byteArray) {
if (byteArray == null || byteArray.length < 1)
throw new IllegalArgumentException("this byteArray must not be null or empty");
final StringBuilder hexString = new StringBuilder();
for (int i = 0; i < byteArray.length; i++) {
if ((byteArray[i] & 0xff) < 0x10)//0~F前面不零
hexString.append("0");
hexString.append(Integer.toHexString(0xFF & byteArray[i]));
}
return hexString.toString().toLowerCase();
}
public static byte[] toByteArray(String hexString) {
if (StringUtils.isNullOrEmpty(hexString))
throw new IllegalArgumentException("this hexString must not be empty");
hexString = hexString.toLowerCase();
final byte[] byteArray = new byte[hexString.length() / 2];
int k = 0;
for (int i = 0; i < byteArray.length; i++) {//因为是16进制,最多只会占用4位,转换成字节需要两个16进制的字符,高位在先
byte high = (byte) (Character.digit(hexString.charAt(k), 16) & 0xff);
byte low = (byte) (Character.digit(hexString.charAt(k + 1), 16) & 0xff);
byteArray[i] = (byte) (high << 4 | low);
k += 2;
}
return byteArray;
}
}
编译结果如下图所示:
运行结果如下图所示:
3.操作包括从格式化字符串输入数值和利用格式化字符串输出数值。
- DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字;
- DecimalFormat 包含一个模式 和一组符号。
- 相关符号:
“0”一个数字
“#”一个数字,不包括 0
“.”小数的分隔符的占位符
“,”分组分隔符的占位符
“;”分隔格式。
“-”缺省负数前缀。
“%”乘以 100 和作为百分比显示
“?”乘以 1000 和作为千进制货币符显示;用货币符号代替;如果双写,用国际货币符号代替。如果出现在一个模式中,用货币十进制分隔符代替十进制分隔符。
“X”前缀或后缀中使用的任何其它字符,用来引用前缀或后缀中的特殊字符。
代码:
import java.text.DecimalFormat;
import java.util.Scanner;
public class rw22 {
public static void main(String[] args) {
// TODO Auto-generated method stub
DecimalFormat df1 = new DecimalFormat("0.0");
DecimalFormat df2 = new DecimalFormat("#.#");
DecimalFormat df3 = new DecimalFormat("000.000");
DecimalFormat df4 = new DecimalFormat("###.###");
DecimalFormat df5 = new DecimalFormat("#%");
System.out.println("请输入一个数值:");
Scanner a = new Scanner(System.in);
double s = a.nextDouble();
System.out.println("格式化字符串后得:");
System.out.println(df1.format(s));
System.out.println(df2.format(s));
System.out.println(df3.format(s));
System.out.println(df4.format(s));
System.out.println(df5.format(s));
}
}
编译结果如下图所示:
运行结果如下图所示: