我想从字符串‘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 PTE
或Basit LIMITED PRIVATE PTE LTD
或四个单词的任意组合。然后上面的代码只删除姓氏,即PTE
或PRIVATE
,依此类推,输出为BasitLIMITEDPRIVATELTD
。
我希望输出只是Basit
我该怎么做?
由于
---------------编辑---
请注意,公司名称只是一个例子,它不一定总是相同的。可能我的名字就像
String company = "Masood LIMITED LTD PTE PRIVATE"
或任何最终可以包含上述词语的名称。
由于
答案 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