2016-09-30 22 views
-1

- >我怎樣才能提高在下面的代碼「從一個字符串刪除字符的效率」:提高efficiencey從字符串在java中刪除字符

import java.util.Scanner; 

public class StringPractice { 

public static void main(String[] args) { 
    Scanner sc=new Scanner(System.in); 
    System.out.println("Enter a String : "); 
    String str; 
    str=sc.nextLine(); 
    System.out.println("Enter char to remove : "); 
    char ch=sc.nextLine().charAt(0); 

    char[] a=new char[str.length()]; 
// System.out.println("Parameters : Char : "+ch+" String : "+str+"\n"); 

    StringPractice ob=new StringPractice(); 
    a=ob.removeChar(str,ch); 
    String str1=new String(a); 
    System.out.println("New String is : "+str1); 
} 
char[] removeChar(String a,char c){ 
    char[] ch=new char[a.length()]; 
    byte count=0; 
    for(int i=0;i<a.length();i++){ 
     if(a.charAt(i)==c){ 
      count++; 
      continue; 
     } 
     ch[i-count]=a.charAt(i); 
    } 

    return ch; 
} 
} 
+0

對我來說,它似乎相當優化的代碼。它應該比標準方法更快。這是你程序中的熱點嗎? – olsli

+0

預熱代碼,如果您先編譯代碼,它可以運行速度提高50+倍,而無需更改代碼。 –

+1

如果您從中刪除字符,您有一個錯誤:char [] ch'不會更小。我會先擔心正確性,然後再加速。 –

回答

0

您還可以使用StringBuilder類這是可變的。

StringBuilder sb = new StringBuilder(inputString);

public class RemoveString { 
 
\t 
 
\t 
 
\t public static void main (String args[]){ 
 
\t \t StringBuilder name= new StringBuilder("chandu"); 
 
\t \t 
 
\t \t int i= name.indexOf("n"); 
 
\t \t name.deleteCharAt(i); 
 
\t \t System.out.println(name.toString()); 
 
\t \t 
 
\t \t 
 
\t }

+0

角色可能會出現多次。 –

+0

是的。正是我在想什麼。 – ClaxX

2

據我你正在編寫代碼以去除刺字符出現這樣只是空字符串替換: 只要改變這個代碼就沒有必要removeChar方法:

StringPractice ob=new StringPractice(); 
     a=ob.removeChar(str,ch); 
     String str1=new String(a); 

的SOI:

str = str.replace(ch, ""); 

替換所有出現:

str = str.replaceAll("ch",""); 
+0

我不確定分配給新字符串中字符的索引。而且,我們仍然需要在一個字符串中出現多個出現的情況下進行循環。例如,如果我們想從大象中刪除'e'。 – ClaxX

+0

請參閱更新的答案 –

1

內置字符串函數replaceAll()刪除所有的事件和replace()刪除單個字符。

string = string.replaceAll("c",""); 
string = string.replace("c","");