【问题标题】:Deleting content of every string after first empty space在第一个空格后删除每个字符串的内容
【发布时间】:2017-06-08 18:09:08
【问题描述】:

如何删除用户选择的字符串中第一个空格后的所有内容?我在读这个how to remove some words from a string in java。这对我有帮助吗?

【问题讨论】:

  • “空格”是指空格字符还是其他空格?
  • 你的意思是从字符串中提取第一个单词吗?

标签: java string


【解决方案1】:

您可以使用 replaceAll 和正则表达式 \s.* 匹配空格后的所有内容:

String str = "Hello java word!";
str = str.replaceAll("\\s.*", "");

输出

Hello

regex demo


就像@Coffeehouse Coder 在评论中提到的那样,如果输入以空格开头,此解决方案将替换所有内容,因此如果您想避免这种情况,您可以使用string.trim() 修剪您的输入,这样它就可以删除开头的空格最后。

【讨论】:

  • 别忘了修剪字符串。
  • @CoffeehouseCoder 不需要,因为空间也会被替换:)
  • 开头的空格怎么办?
  • 在这种情况下它将替换所有东西@CoffeehouseCoder 操作员说after first empty space
【解决方案2】:

假设字符串的开头没有空格。 请按照以下步骤操作-

  1. 在空格处分割字符串。它将创建一个数组。
  2. 获取该数组的第一个元素。

希望这会有所帮助。

str = "Example string"
String[] _arr = str.split("\\s");
String word = _arr[0];

在考虑上述代码之前,您需要在开头考虑多个空格和空格。

我不是 JAVA 编程的本地人,但我知道它具有字符串拆分功能。 而且您在问题中引用的参考有点复杂,而您可以很容易地实现所需的东西。

P.S. 以后如果你下定决心得到两个或三个单词,分割方法会更好(假设你已经处理了多个空格),否则 substring 会更好。

【讨论】:

    【解决方案3】:

    一个简单的方法可以是:

    System.out.println("Hello world!".split(" ")[0]);
    

    【讨论】:

    • 第一个空格前删除需要做什么?你能帮我吗
    【解决方案4】:
    // Taking 'str' as your string
    // To remove the first space(s) of the string, 
    str = str.trim();
    int index = str.indexOf(" ");
    String word = str.substring(0, index);
    

    这只是众多方法中的一种。

    str = str.replaceAll("\\s+", " "); // This replaces one or more spaces with one space
    String[] words = str.split("\\s");
    String first = words[0];
    

    【讨论】:

      【解决方案5】:

      在我看来,最简单的解决方案是找到用户希望将其截断的索引,然后从 0 调用 substring() 方法到他们想要的索引。将那个 = 设置为一个新字符串,你就有了他们想要的字符串。

      如果要替换字符串,只需将原始字符串 = 设置为 substring() 方法的结果即可。

      链接到 substring() 方法:https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#substring(int,%20int)

      【讨论】:

      • 定位子串然后获取子串?这种方法可能比拆分更快。
      • 我认为应该是。它几乎不需要解析能量并使用一种方法。拆分需要更多的时间和空间。
      • 拆分将有助于获得两个单词以备不时之需。因此拆分比您当前的方法灵活。
      • 公平,但我只是根据给定的内容回答基础,如果您不需要灵活性,那么不妨采取简单的路线。
      • 我的方法是懒惰的,所以它包含了未来的东西。
      【解决方案6】:

      已经有 5 个非常好的答案,所以让我添加第六个。多样性是生活的调味品!

      private static final Pattern FIRST_WORD = Pattern.compile("\\S+");
      
      public static String firstWord(CharSequence text) {
          Matcher m = FIRST_WORD.matcher(text);
          return m.find() ? m.group() : "";
      }
      

      .split(...)[0] 类型答案的优势:

      1. 它直接执行所要求的操作,即“查找非空格字符的第一个序列”。所以自文档更明确。

      2. 在多个字符串上调用时效率更高(例如,用于批量处理大量字符串列表),因为正则表达式只编译一次。

      3. 它更节省空间,因为当我们只需要第一个单词时,它避免了不必要地创建一个包含每个单词引用的整个数组。

      4. 无需修剪字符串即可工作。

      (我知道这可能为时已晚,对 OP 没有任何用处,但我将其留在这里作为未来读者的替代解决方案。)

      【讨论】:

        【解决方案7】:

        这样会更有效率

            String str = "Hello world!";
            int spaceInd = str.indexOf(' ');
            if(spaceInd != -1) {
                str = str.substring(0, spaceInd);
            }
            System.out.println(String.format("[%s]", str));
        

        【讨论】:

          猜你喜欢
          • 2012-05-19
          • 2016-03-26
          • 1970-01-01
          • 2022-08-19
          • 1970-01-01
          • 2012-03-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多