2013-03-07 3 views
4

Я хочу, чтобы удалить следующие слова из конца строки ‘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" 

или любое имя, которое может содержать вышеупомянутые слова в конце.

Thanks

+0

Удалите пробел перед каждым словом, которое вы удаляете. – BobTheBuilder

ответ

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); 
9

Вы можете сделать это в одной строке. нет необходимости проходить через петлю. просто используйте String#replaceAll(regex, str).

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

Это также удалит строку внутри другого слова. – BobTheBuilder

+0

@baraky не понимает, что вы имеете в виду. – PermGenError

+1

Если строка была: «COMPTETITION LIMITED ...», это изменит первое слово на COMTITION – BobTheBuilder

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","")); 
} 
+0

Нет, это просто пример , это может быть любая комбинация, здесь i ha Например, строка rdcoded, например, может быть у меня есть название компании Masood PRIVATE PTE LTD LIMITED' ... – Basit

0

Все, что вам нужно использовать trim() и вызвать вашу функцию рекурсивно, или каждый раз, когда вы удалите подстрока с конца сбросьте i 0.

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 должен работать, как объясняют другие.

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

0

Я пытался сделать то же самое для одного из моих проектов. Я написал этот код несколько дней назад. Теперь я точно пытался найти гораздо лучший способ сделать это, вот как я нашел этот вопрос.Но, увидев другие ответы, я решил поделиться своей версией кода.

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()); 
Смежные вопросы