1

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

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

  • 如果“Richard”之前有一个空格
  • 如果“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");}
    }
}
4

5 回答 5

3

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

name.split("\\s+");
于 2012-09-17T13:05:04.807 回答
1

如果有两个空格 temp[1] 将是空的,给定“Richard flush”,数组以这种方式拆分

1 理查德

2

3 冲洗

你应该trim()字符串并做类似的事情

while(name.contains("  "))
    name=name.replace("  "," ");
于 2012-09-17T13:07:52.047 回答
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删除前导和尾随空格,因为这会导致数组中的前导或尾随空字符串

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

于 2012-09-17T13:16:37.973 回答
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");
    }
}
于 2012-09-17T13:14:10.217 回答
-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;
}

然后使用修剪后的字符串代替名称。

于 2012-09-17T13:13:52.820 回答