【问题标题】:Split string not Working拆分字符串不起作用
【发布时间】:2018-08-13 03:11:05
【问题描述】:

我有一个 arrayList myfavourites,其中索引 0 处只有一个元素,它包含以下内容

->  ed sheeran . .  beyonce . .  katty perry . . .  

我想将这个字符串拆分为另一个仅包含名称的数组,例如

       for(int f =0; f < myFavourites.size();f++){

       String[] someArray = null;
       someArray[f] = myFavourites.get(f).split("\\.");

   }

所以当我遍历数组 myfavourites 时,我可以获得 index[0] =ed sheeran、index[1]= beyonce 等。 我试图运行上面+下面的代码,它没有显示任何东西,有人能告诉我我的代码有什么问题吗,谢谢。

System.out.println(someArray[1]);

应该会回归碧昂丝

【问题讨论】:

  • 您实际上并没有打印结果,那么您认为它会显示什么?
  • also: split 返回一个字符串数组,而不是一个字符串。这不应该编译: someArray[f] = myFavourites.get(f).split("\\.");
  • 是的,我确实打印了它
  • 不在您发布的代码中。使用edit 选项并正确发布minimal reproducible example
  • @Mattieu:不在您显示的代码中。而且,再次: split("").. 返回一个字符串数组,您试图将拆分的结果分配给单个字符串。您显示的代码不起作用,请发布您的实际代码

标签: java arrays regex arraylist split


【解决方案1】:

split("\\.")

仅当字符串像这样时才有效

ed sheeran.beyonce.katty perry

您可以使用PatternMatcher 查找所有名称:

ArrayList<String> names = new ArrayList<>();
String s = "->  ed sheeran . .  beyonce . .  katty perry . . .  ";
Pattern reg = Pattern.compile("\\w+\\s?\\w+");
Matcher m = reg.matcher(s);
while (m.find()) {
    names.add(m.group());
}
String[] someArray = names.toArray(new String[]{});

更新:

如果有 A B CA B CA-B C 之类的名称,这个更好:

Pattern.compile("\\w[ \\w\\-]*\\w");

【讨论】:

  • @Mattieu Kevin 有没有像Daniel Day-Lewis 这样的名字?如果有,你还有更多工作要做……
  • \\w+\\s?\\w+ 看起来像 catastrophic backtracking 的候选者。可能更安全的选择是\\w+(\\s+\\w+)?
最近更新 更多