如何从String的结尾删除匹配的单词

时间:2013-03-07 09:31:26

标签: java

我想从字符串‘PTE’, ‘LTD’, ‘PRIVATE’ and ‘LIMITED’

的末尾删除以下字词

我尝试了代码,但后来我卡住了。我试过这个

String[] str = {"PTE", "LTD", "PRIVATE", "LIMITED"};

String company = "Basit LTD";
for(int i=0;i<str.length;i++) {

    if (company.endsWith(str[i])) {

        int position = company.lastIndexOf(str[i]);
        company = company.substring(0, position);        
    }
}

System.out.println(company.replaceAll("\\s",""));

有效。但假设公司最终是Basit LIMITED PRIVATE LTD PTEBasit LIMITED PRIVATE PTE LTD或四个单词的任意组合。然后上面的代码只删除姓氏,即PTEPRIVATE,依此类推,输出为BasitLIMITEDPRIVATELTD

我希望输出只是Basit

我该怎么做?

由于

---------------编辑---

请注意,公司名称只是一个例子,它不一定总是相同的。可能我的名字就像

String company = "Masood LIMITED LTD PTE PRIVATE"

或任何最终可以包含上述词语的名称。

由于

7 个答案:

答案 0 :(得分:9)

您可以单行执行此操作。无需循环。只需使用String#replaceAll(regex, str)

company = company.replaceAll("PTE$*?|LTD$*?|PRIVATE$*?|LIMITED$*?","");     

答案 1 :(得分:2)

如果您只想在字符串的末尾删除这些后缀,那么您可以引入while循环:

String[] str = {"PTE", "LTD", "PRIVATE", "LIMITED"};
boolean foundSuffix = true;

String company = "Basit LTD";

while (foundSuffix) {
    foundSuffix = false;

    for(int i=0;i<str.length;i++) {

        if (company.endsWith(str[i])) {
            foundSuffix = true;
            int position = company.lastIndexOf(str[i]);
            company = company.substring(0, position);        
        }
    }
}
System.out.println(company.replaceAll("\\s",""));

如果您不介意将PTE Basit LIMITED INC转换为Basit(并删除第一个PTE),那么replaceAll应该可以正常工作,正如其他人所解释的那样。

答案 2 :(得分:2)

如果您将不需要的单词放在地图中,它将在结果字符串

中被省略
    HashMap map = new HashMap();
    map.put("PTE", "");
    map.put("LTD", "");
    map.put("PRIVATE", "");
    map.put("LIMITED", "");



    String company = "Basit LTD PRIVATE PTE";


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

    String resultantStr = "";

    for(int k = 0; k < words.length; k++){
        if(map.get(words[k]) == null) {
            resultantStr += words[k] + " ";

        }
    }


    resultantStr = resultantStr.trim();
    System.out.println(" Trimmed String: "+  resultantStr);

答案 3 :(得分:1)

我试图为我的一个项目做同样的事情。几天前我写了这段代码。现在我正试图找到一个更好的方法来做到这一点,这就是我发现这个问题的方法。但在看到其他答案后,我决定分享我的代码版本。

Collection<String> stopWordSet = Arrays.asList("PTE", "LTD", "PRIVATE", "LIMITED");    

String company = "Basit LTD"; //Or Anything
String[] tokens = company.split("[\@\]\\\_\^\[\"\#\ \!\&\'\`\$\%\*\+\(\)\.\/\,\-\;\~\:\}\|\{\?\>\=\<]+");

Stack<String> tokenStack = new Stack<>();
tokenStack.addAll(Arrays.asList(tokens));
while (!tokenStack.isEmpty()) {
     String token = tokenStack.peek();
     if (stopWordSet.contains(token))
         tokenStack.pop();
     else
         break;
}

String formattedCompanyName = StringUtils.join(tokenStack.toArray());

答案 4 :(得分:0)

试试这个:

public static void main(String a[]) {   
    String[] str = {"PTE", "LTD", "PRIVATE", "LIMITED"};
    String company = "Basit LIMITED PRIVATE LTD PTE";

    for(int i=0;i<str.length;i++) {
        company = company.replaceAll(str[i], "");
    }

    System.out.println(company.replaceAll("\\s",""));
}

答案 5 :(得分:0)

您只需要使用trim()并递归调用您的函数,或者每次从末尾删除子字符串时,将i重置为0.

答案 6 :(得分:0)

public class StringMatchRemove {

    public static void main(String[] args) {

        String str="my name is noorus khan";
        String search="noorus";
        String newString="";
        String word=str.replace(search," ");
        StringTokenizer st = new StringTokenizer(word," ");
        while(st.hasMoreTokens())
        {
          newString = newString + st.nextToken() + " "; 
        }
        System.out.println(newString);

    }

首先使用我们得到的word=my name is ..... khan替换方法(注意:此处(.)表示空格)。现在我们必须删除这些空格,因为我们正在创建一个简单添加所有令牌的新字符串。

输出:my name is khan