【问题标题】:Extract first word of a string (untilSpace)提取字符串的第一个单词(直到空格)
【发布时间】:2021-02-16 00:14:53
【问题描述】:

问题是:

编写一个函数untilSpace(s),它返回一个s的子字符串从头开始一直延伸到找到一个空格。返回值中不包含空格。参数总是有一个空格。

例子:

untilSpace("ab cde") -> "ab"

我的代码解决方案是:

public String untilSpace(String s){
    String str = s;
    str = str.replaceFirst(" ", "");
    System.out.println(str);
    return str;  
}

我设法删除了空格,但我仍然需要找到一种方法来删除空格之后的其余字符串。

【问题讨论】:

  • 这能回答你的问题吗? How to split a string in Java
  • 这不是使用拆分的欺骗。使用 split 是 一种 方式,但不是必需的方式,甚至不一定是“更好”的方式。

标签: java string split


【解决方案1】:

使用正则表达式替换:

public String untilSpace(String s) {
    return s.replaceAll(" .*", "");
}

这可以通过将正则表达式匹配的所有内容替换为空 - 有效地删除它。

正则表达式" .*" 表示“空格后跟任何字符到输入末尾”。

【讨论】:

  • 除非我弄错了他本质上想要 str.split(" ")[0]
  • 我认为这是一种相当不寻常的解决方法。假设有split(也有匹配限制)和indexOf + substring。但可以肯定的是,有效,赞成。
  • @Zabuzard 实际上 replaceAll 是一种更通用的方法来提取字符串的近乎任意部分。使用 split 假设目标的开始和结束在那里是可拆分的,而且 split 做了更多的工作。
  • @MatthewKerian 在这种情况下,是的。但在一般情况下, split 不如 replaceAll 通用 - 请参阅之前的评论。
【解决方案2】:

split

您可以在空格上拆分字符串并使用第一个元素:

String firstWord = text.split(" ")[0];

您还可以通过限制您感兴趣的元素数量来改进这种方法(如果有很多空格):

String firstWord = text.split(" ", 2)[0];

indexOf + substring

涉及indexOfsubstring 的更手动的方法也很有效:

int index = text.indexOf(' ');
String firstWord = text.substring(0, index);

请注意,如果text 中不包含空格,则此方法将崩溃,因为indexOf 返回-1,这是substring 的无效索引。但就你而言,这很好,因为你的任务说

参数总是有一个空格。

【讨论】:

    猜你喜欢
    • 2014-01-04
    • 2019-06-16
    • 2011-02-05
    • 2020-02-12
    • 2021-04-15
    • 2015-05-08
    • 1970-01-01
    • 2021-10-15
    • 2013-09-04
    相关资源
    最近更新 更多