public class price {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double price ;
//期望输出效果:将价格每隔三位分割如5,234,222.2343
price = scanner.nextDouble();
String pri = price+"";
String part[] = pri.split(".");//以小数点对价格进行分割;
if(part[0]==null)
return;
StringBuffer sb = new StringBuffer(part[0]);
for (int i = sb.length()%3; i
if(i!=0)
sb.insert(i,',');
}
System.out.println(sb+"."+part[1]);
}
}
哪一行报数组越界异常?
你 sb.insert(i,',');之后字符串长度会加1, i也应该i++;加1
for (int i = sb.length()%3; i < sb.length(); i+=3) {
if(i!=0)
{
sb.insert(i,',');
i++;
}
}
pri字符串中如果没有'.', pri.split(".");分割的数组只有part[0]一个元素,没有part[1]
需要加if判断
if (part.length() < 1)
System.out.println(sb+"."+part[1]);
else
System.out.println(sb);
String part[] = pri.split("\\.");
输出part看看,分隔符有问题,导致分隔后的内容为空,点转义后试试。
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!因为按小数点分隔时这个小数点需要转义,需要加两个反斜杠,因为没有看到全部代码,所以判断需要加逗号的部分我自己修改了下,以及double型那里需要修改成取消科学记数法显示以免取double型整数部分不对,修改如下:
参考链接:
Java中Double原样输出,取消科学计数法 - Jacky森 - 博客园
Java split() 方法 | 菜鸟教程
Java StringBuffer 和 StringBuilder 类 | 菜鸟教程
import java.text.NumberFormat;
import java.util.Scanner;
public class price {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double price ;
//期望输出效果:将价格每隔三位分割如5,234,222.2343
price = scanner.nextDouble();
//https://www.cnblogs.com/yuanlinjie/p/9915176.html
NumberFormat nf = NumberFormat.getInstance();
// 取消科学计数法,以免将在下面取double型数据整数部分时不对
nf.setGroupingUsed(false);
String pri = nf.format(price);
//System.out.println("pri="+pri);
//https://m.runoob.com/java/java-string-split.html
String part[] = pri.split("\\.");//以小数点对价格进行分割;
if(part.length==0)
return;
System.out.println("part[0]="+part[0]+",part[1]="+part[1]);
StringBuffer temp = new StringBuffer(part[0]);
StringBuffer sb = new StringBuffer(part[0]).reverse();
//System.out.println("sb="+sb);
//System.out.println("sb.length="+sb.length());
//int k=3;
for (int i =0 ; i<sb.length();i++) {
//在第三个数位后加逗号,然后每隔四个位加一个逗号(因为后面增加了一个逗号)
if((i==3)||(i>3&&(i-3)%4==0)) {
//https://www.runoob.com/java/java-stringbuffer.html
sb.insert(i,',');
//System.out.println("i="+i+",sb="+sb);
//scanner.nextDouble();
}
}
sb = sb.reverse();
System.out.println(sb+"."+part[1]);
}
}