2016-09-30 5 views
-1

-> Wie kann ich „Effizienz des Entfernens ein Zeichen aus einer Zeichenkette“ in dem folgenden Code verbessern:verbessern efficiencey ein Zeichen aus einer Zeichenfolge in Java entfernen

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

Für mich scheint es ziemlich optimierten Code. Es sollte schneller als Standardmethoden sein. Ist das ein Hotspot in Ihrem Programm? – olsli

+0

wärmen Sie den Code, es kann mehr als 50 Mal schneller ausgeführt werden, ohne es zu ändern, wenn Sie den Code zuerst kompilieren. –

+1

Sie haben einen Fehler, dass der 'char [] ch' nicht kleiner ist, wenn Sie Zeichen daraus entfernen. Ich würde mich zuerst um die Korrektheit und dann um die Geschwindigkeit kümmern. –

Antwort

0

Sie können auch die Stringbuilder-Klasse verwenden Das ist veränderbar.

StringBuilder sb = neuer 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

Das Zeichen könnte mehrere Male erscheinen. –

+0

ja. genau was ich dachte. – ClaxX

2

Nach mir Sie Code schreiben ein Zeichen Auftreten von einem Stachel zu entfernen, so ersetzen Sie es nur mit leeren String: einfach diesen Code ändern keine Notwendigkeit der removeChar Methode gibt es:

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

SOl:

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

zu vermieten Alle Vorkommen ersetzen:

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

Ich bin mir nicht sicher über die Indizes, die den Zeichen im neuen String zugewiesen sind. Darüber hinaus müssen wir immer noch eine Schleife haben, wenn mehrere Ereignisse in einer Zeichenfolge auftreten. zB wenn wir "e" vom Elefanten entfernen wollen. – ClaxX

+0

Bitte lesen Sie die aktualisierte Antwort –

1

eingebaute String-Funktion replaceAll() entfernen alle Vorkommen und replace() einzelnes Zeichen zu entfernen.

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