Java拆分数组

时间:2015-02-13 22:17:19

标签: java

因此,我尝试将数字123456789123-456-789打印出来。我正在尝试使用像numbers[0].substring(0,2) + "-" + numbers[0].substring(3,5)这样的子字符串来执行某些操作......以下是我到目前为止的内容。

InputStreamReader reader = new InputStreamReader(System.in);
BufferedReader input = new BufferedReader(reader);

String inputValue;

inputValue = input.readLine();
String[] numbers = inputValue.split("\\s+");

// This part here is incorrect but this is similar to the idea I am trying to do

System.out.print(numbers[0].substring(0,2) + "-" + 
                 numbers[0].substring(3,5) + "-" +
                 numbers[0].substring(6,8));

我不断收到此错误=线程中的异常" main" java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:8

3 个答案:

答案 0 :(得分:2)

来自Javadoc for String.substring

  

public String substring(int beginIndex,                           int endIndex)

     

返回一个新字符串,该字符串是此字符串的子字符串。子字符串从指定的开始   beginIndex并扩展到索引endIndex处的字符 - 1.因此   子串的长度是endIndex-beginIndex。

范围的结尾是独家的,所以你需要

System.out.print(numbers[0].substring(0,3) + "-" + 
             numbers[0].substring(3,6) + "-" +
             numbers[0].substring(6,9));

答案 1 :(得分:0)

如果我理解你的问题,那么你可以用

之类的东西来做
String inputValue = "123456789";
if (inputValue.length() == 9 && inputValue.matches("\\d+")) {
    String a = inputValue.substring(0, 3);
    String b = inputValue.substring(3, 6);
    String c = inputValue.substring(6);
    System.out.printf("%s-%s-%s%n", a, b, c);
} else {
    System.out.println("Could not format: " + inputValue);
}

输出(按要求)

123-456-789

答案 2 :(得分:0)

彼得的答案应该被接受,但是如果你想以快速和肮脏的方式做到这一点,你可以将字符串转换为字符数组,然后使用循环打印3个数字的数字,然后是连字符。当然,您必须执行您认为需要的任何错误检查。