删除字符串中的最后一个已知单词

时间:2014-07-02 01:04:07

标签: java string

如何删除字符串中的最后一个已知单词?

例如这里的一句话,

"Hello, World. more>>

我想删除more>>的最后一个单词。这个词在我的所有String集合中都是已知的。

尝试使用replaceAll方法,但无法使其正常工作。

我也尝试了substring

person = person.substring(0, person.lastIndexOf(" ")) + " ";

但它删除了我的句子中的最后两个单词。正则表达式有帮助吗?

6 个答案:

答案 0 :(得分:1)

使用正则表达式替换捕获组非常容易。 看你的例子:

     System.out.println("Hello, World. more>>".replaceAll("(.+)\\s+\\S+$", "$1"));

输出:

     "Hello, World."

如果你想要一些解释,你可以问我这个正则表达式的工作原理。

再次阅读..您可以直接使用以下代码:

     System.out.println("Hello, World. more>>".replaceAll("(.+)\\s+more>>$", "$1"));

注意到"更多>>"正如你所说的那样,正在你的所有String集合中发生。

答案 1 :(得分:1)

如果我理解你的问题,你可以写一个像String removeFromEnd(String, String) -

这样的方法
public static String removeFromEnd(String in, String rem) {
  if (in != null) {
    if (in.endsWith(rem)) {
      return in.substring(0, in.length() - rem.length()).trim();
    }
    return in.trim();
  }
  return null;
}

public static void main(String[] args) {
  String person = "Hello, World. more>>";
  String toRemove = "more>>";

  System.out.printf("'%s'%n", removeFromEnd(person, toRemove));
}

哪个输出

'Hello, World.'

答案 2 :(得分:0)

public static String removeLastWord(String s,String knownword)
{
    int pos = s.length();
    for(int i=s.length()-1;i>=0;i--)
    {
        if(s.charAt(i)==' ')
        {
            if(s.substring(i+1,pos).equals(knownword))
                return s.substring(0,i);
            pos = i;
        }
    }
    return s;
}

我相信你所寻找的是这样的。从结束开始并递减直到找到空格,然后查看是否为已知字,如果没有,则继续递减 直到你找到它。如果找不到,则返回原件。

但是,如果你必须检查大量的字符串,我建议使用Set数据结构存储所有唯一的字符串,这样你就可以访问它们O(1)。当您调用此方法时,这将确保O(n)的运行时间

答案 3 :(得分:0)

  

尝试使用replaceAll方法,但无法使其正常工作。

replaceAll方法采用正则表达式模式,可能会让你感到困惑。该方法的签名如下:

public String replaceAll (String regularExpression, String replacement)

replace方法应该有效,并且还会替换您指定的所有字符串。

public String replace (CharSequence target, CharSequence replacement) 
Copies this string replacing occurrences of the specified target sequence with another sequence. The string is processed from the beginning to the end.
  

public int lastIndexOf(String string)

也应该有效。确保您的搜索字符串实际匹配(可能空格不是空格等)

答案 4 :(得分:0)

尝试使用单词边界替换all。这应该工作

String abc = "Hello, World. more>>";
String x = ">>";
System.out.println(abc);
abc= abc.replaceAll("\\bmore\\b"+x,"");
System.out.println(abc);

答案 5 :(得分:0)

假设每个单词与其他单词分开“”,那么:

public String getWithoutLast(String myPhrase) {

    String result = "";
    String [] temp = myPhrase.trim().split(" ");

    //Cycle going from the first word to the word before the last word
    result = temp[0];
    for (int i=1; i<temp.length-1; i++){
        result += " " + temp[i];
    }

    return result;
}