拆分字符串无法正常工作

时间:2015-02-17 06:52:34

标签: java string split

我无法用空格分割名称,我似乎无法找出原因。有人可以给我一个解决方案吗?

我的代码是这样的:

 public void getPlayerNames(int id){
    try {
        Document root = Jsoup.connect("http://www.altomfotball.no/element.do?cmd=team&teamId=" + id).get();
        Element table = root.getElementById("sd_players_table");
        Elements names = table.getElementsByTag("a");

        for(Element name : names){
            getPlayers().add(new Player(name.text()));
        }

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

将足球运动员的名字作为字符串返回。检索名称,如Mario Balotelli,Steven Gerrard等,我假设我可以使用string.split("");得到我的名字和姓氏,但每当我尝试访问字符串数组的第二个空格时,它给我一个超出范围的索引异常。这是试图获取名字的代码

/**
 * Method to get the first name of a player
 */
public static String getFirstName(String name){
    String[] nameArray = name.split(" ");
    return nameArray[0];
}

感谢您的回答!

Sindre M

编辑###### 所以我得到了它的工作,但感谢你的努力。问题是即使我在一个简单的sysout语句中看不到它,名字实际上包含一个"& nbsp&#34 ;;字符,所以我通过在名称上运行replaceAll("& nbsp;","")来解决它,以获得更好的格式。

5 个答案:

答案 0 :(得分:0)

如果你正在尝试编写一个屏幕抓取器,你需要在代码中更加防御......绝对先测试数组的长度并记录任何意外的输入,以便以后合并它们......

public static String getFirstName(String name) {
    String[] nameArray = name.split(" ");
    if (nameArray.length >= 1) {  // <== check length before you access nameArray[0]  
        return nameArray[0];   
    } else {
        // log error
    }
    return null;
}

此外,Java 8中的java.util.Optional为返回null ...提供了一个很好的替代方法。

public static Optional<String> getFirstName(String name) {
    String[] nameArray = name.split(" ");
    if (nameArray.length >= 1) {
        return Optional.of(nameArray[0]);
    } else {
        // log error
    }
    return Optional.empty();
}

答案 1 :(得分:0)

当你从html页面检索时,你可能会进入实际的字符串。尝试调试和检查。

答案 2 :(得分:0)

package com.appkart.examples;

public class SplitProgram {

    public void firstNameArray(String nameString) {
        String strArr[] = nameString.split(",");

        for (String name : strArr) {
            String playerName = name.trim();
            String firstName = playerName.substring(0, playerName.indexOf(" "));
            System.out.println(firstName);
        }
    }

    public static void main(String[] args) {
        String nameString = "Mario Balotelli, Steven Gerrard";
        SplitProgram program = new SplitProgram();
        program.firstNameArray(nameString);
    }
}

答案 3 :(得分:0)

我认为正确的答案应该是:

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

但说实话,stackoverflow上有几个答案。 例如

How to split a String by space

How do I split a string with any whitespace chars as delimiters?

答案 4 :(得分:0)

首先尝试将空格替换为

string.replace(" ","");

然后尝试用[,]分割为

String strAr[] = string.split(",");