与数组索引相关的错误

时间:2012-09-17 13:01:14

标签: java split

下面的代码有变量“name”。这可能包含名字或姓氏或仅包含名字。此代码检查变量“name”中是否有空格。如果存在空间,则它会分裂。

但是,我在以下情况下得到“错误:线程中的异常”主“java.lang.ArrayIndexOutOfBoundsException:1在Space.main(Space.java:9)”

  • 如果在“Richard”之前有空白区域
  • 如果“理查德”之后有空格,没有第二个字或第二个字符串。
  • 如果我在“Richard”之后有两个空格,那么它不会将名称保存在lname变量中。

如何解决此错误。

public class Space {
    public static void main(String[] args) {
    String name = "Richard  rinse ";
    if(name.indexOf(' ') >= 0) {
        String[] temp;
        temp = name.split(" ");
        String fname = temp[0];
        String lname = temp[1];
        System.out.println(fname);
        System.out.println(lname);
    } else {
        System.out.println("Space does not exists");}
    }
}

5 个答案:

答案 0 :(得分:3)

你必须使用像这样的“\ s”分割字符串

name.split("\\s+");

答案 1 :(得分:1)

如果有两个空格,temp [1]将为空,给定“Richard rinse”,阵列会以这种方式分割

1理查德

2

3冲洗

你应该trim()字符串并执行类似

的操作
while(name.contains("  "))
    name=name.replace("  "," ");

答案 2 :(得分:1)

String[] parts = name.trim().split("\\s+");

if (parts.length == 2) {
    // print names out
} else {
    // either less than 2 names or more than 2 names
}

trim删除前导和尾随空格,因为这会导致数组中的前导或尾随空字符串

要拆分的标记是一个正则表达式,表示由一个或多个空白字符(空格,制表符等等)组成的任何字符系列。

答案 3 :(得分:0)

也许就是这样:

public class Space {
    public static void main(String[] args) {
        String name = "Richard  rinse ";
        String tname = name.trim().replace("/(\\s\\s+)/g", " ");
        String[] temp;
        temp = name.split(" ");
        String fname = (temp.length > 0) ? temp[0] : null;
        String lname = (temp.length > 1) ? temp[1] : null;
        if (fname != null) System.out.println(fname);
        if (lname != null) System.out.println(lname);
    } else {
        System.out.println("Space does not exists");
    }
}

答案 4 :(得分:-1)

要修剪空白区域,请使用此方法。

public String trimSpaces(String s){
    String str = "";
    boolean spacesOmitted = false;
    for (int i=0; i<s.length; i++){
        char ch = s.chatAt(i);
        if (ch!=' '){
            spacesOmitted = true;
        }
        if (spacesOmitted){
            str+=ch;
        }
    }
    return str;
}

然后在名称处使用修剪过的字符串。