JAVA——基本字符操作(四)

版权声明:DY https://blog.csdn.net/Atishoo_13/article/details/82807865

基本字符操作(四)

本文通过一些实例,介绍了与字符串有关的数值转换、字节数组转换和格式化字符串。读者若想查阅其他类型的操作,可参考以下博客。
两个字符集合间的对比:
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));
	}

}

编译结果如下图所示:
在这里插入图片描述
运行结果如下图所示:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Atishoo_13/article/details/82807865