因此,我尝试将数字123456789
与123-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
答案 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个数字的数字,然后是连字符。当然,您必须执行您认为需要的任何错误检查。