为什么会报数组越界异常

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]);
}

}

img

哪一行报数组越界异常?
你 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看看,分隔符有问题,导致分隔后的内容为空,点转义后试试。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632

因为按小数点分隔时这个小数点需要转义,需要加两个反斜杠,因为没有看到全部代码,所以判断需要加逗号的部分我自己修改了下,以及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 ;
    //期望输出效果:将价格每隔三位分割如5234222.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]);
    }
}

img