【问题标题】:Use substring to retain middle value in string使用子字符串保留字符串中的中间值
【发布时间】:2017-03-13 15:07:56
【问题描述】:
String s = "John Stuart Mill";
String aFriendlyAssigneeName = s.substring(s.lastIndexOf('-')+1);

我目前能够从 jstm - John Stuart Mill 中删除 jstm -,但我不确定现在如何删除 John 之后的所有内容。

所有数据都将采用initials - Fist Middle Last 格式。基本上我只想剥离除First之外的所有内容。

我怎样才能做到这一点?也许通过删除第三个空格之后的所有内容...

【问题讨论】:

  • 搜索第一个空格或使用正则表达式。
  • @PM77-1 第一个空格在jstm之后

标签: java string substring


【解决方案1】:

我就用这个,应该够快,而且很短:

String aFriendlyAssigneeName = s.split(" ")[2];

(在其中的空格处拆分字符串,并获取数组的第三个成员,如果它们都采用该格式,则应该是第一个名称。)

【讨论】:

    【解决方案2】:

    这应该可行:

    String s = "jstm - John Stuart Mill";
    String aFriendlyAssigneeName = s.substring(s.lastIndexOf('-')+1);
    String aFriendlyAssigneeName = aFriendlyAssigneeName.substring(aFriendlyAssigneeName.indexOf(' '));
    

    删除首字母后,名字在第一个空格之后结束。

    【讨论】:

      【解决方案3】:

      您正在寻找以下方法-

      s.substring(startIndex, endIndex);
      

      这给出了开始和结束索引,这将帮助您轻松获取任何字符串的中间。

      然后你可以用一点(我敢说)魔法找到最后一个索引......

      endIndex = indexOf(" ", fromIndex)
      

      索引从哪里来

      s.lastIndexOf('-')+1
      

      或者

      如果子字符串不是“硬”要求,请尝试使用

      String[] words = s.split(" ");
      

      这将返回一个由空格分隔的所有值组成的数组。

      然后您可以只选择单词的索引。 (本例话[2])

      【讨论】:

      • 你怎么知道endIndex的值是多少?
      【解决方案4】:

      为什么没有找到没有首字母的字符串中第一次出现空格后的子字符串?

      aFriendlyAssigneeName = aFriendlyAssigneeName.substring(aFriendlyAssigneeName.indexOf('  '));
      

      【讨论】:

      • 第一次出现空格是在jstm之后。
      • 他已经删除了给定代码段中的那部分。因此,我使用他在示例中检索到的最后一个子字符串给出了答案。
      • 你应该在你的回答中澄清这一点:)
      【解决方案5】:

      在我看来,这是一个正则表达式的工作:.* - (\w+)? .*

      final String value = "jstm - John Stuart Mill";
      final Matcher matcher = Pattern.compile(".* - (\\w+)? .*").matcher(value);
      matcher.matches();
      System.out.println(matcher.group(1));
      

      在我看来,使用正则表达式与子字符串:

      优点:

      • 更清楚地了解您期望的输入内容以及您打算捕获的内容。
      • 如果输入更改或您想要捕获其他部分,则可以轻松修改/扩展。

      缺点:

      • 对于不习惯正则表达式的人来说,正则表达式可能看起来更加神秘。

      【讨论】:

        猜你喜欢
        • 2020-07-09
        • 1970-01-01
        • 2022-11-24
        • 2021-06-25
        • 1970-01-01
        • 2015-06-28
        • 1970-01-01
        • 1970-01-01
        • 2013-03-23
        相关资源
        最近更新 更多