2016-11-15 6 views
2

Ich habe eine Zeichenfolge, die mehrere Zahlen enthält, die in der gleichen Zeichenfolge erneut verarbeitet und ersetzt werden müssen.Mehrere Zahlen zwischen Zeichenfolgen abgleichen, sie verarbeiten und ersetzen

Zum Beispiel:

lassen Sie uns sagen, ich habe:

my name is anusha, I am a noob in Java having reputation: 3647 haha I am just kidding my actual reputation is 0001 

Jetzt können sagen, dass ich 3647 extrahieren möchte und multiplizieren oder dividieren oder etwas, um es hinzuzufügen. Lassen Sie uns 3647/100 = 36.47 teilen und durch die ursprüngliche Zahl in der Zeichenkette für 0001 ersetzen und durch 00.01 ersetzen.

Ergebnis String sollte sein:

my name is anusha, I am a noob in Java having reputation: 36.47 haha I am just kidding my actual reputation is 00.01 

Ihre Hilfe schätzen. Ich weiß, dass das für viele dumm ist, aber ich lerne immer noch.

Ich habe versucht zu tun:

Pattern intsOnly = Pattern.compile("\\d+"); 
    Matcher makeMatch = intsOnly.matcher("my name is anusha, I am a noob in Java having reputation: 3647 haha I am just kidding my actual reputation is 0001"); 
    makeMatch.find(); 
    String inputInt = makeMatch.group(); 
    System.out.println(inputInt); 

Aber es nimmt offenbar nur die erste Zahl, weil ich nicht eine Schleife verwendet haben, auch ich bin nicht wirklich sicher, wie die Nummer zu verarbeiten.

+0

Sie haben noch etwas probiert? – XtremeBaumer

+0

Bitte lesen Sie http://stackoverflow.com/help/how-to-ask. Sagen Sie uns, was Sie bereits versucht haben und was nicht funktioniert. –

+0

Ja, verstanden. fügte meine Versuche in der Frage hinzu. Vielen Dank! – Anusha

Antwort

1

Try this:

final String regex = "\\d+"; 
    String string = "my name is anusha, I am a noob in Java having reputation: 3647 haha I am just kidding my actual reputation is 0001"; 
    NumberFormat formatter = new DecimalFormat("00.00");  

    final Pattern pattern = Pattern.compile(regex); 
    final Matcher matcher = pattern.matcher(string); 

    while (matcher.find()) { 
     Float val=new Float(matcher.group(0)); 
     val=val/100; 
     string=string.replace(matcher.group(0),formatter.format(val)); 
    } 
    System.out.println(string); 

} 

Ausgang:

my name is anusha, I am a noob in Java having reputation: 36.47 haha I am just kidding my actual reputation is 00.01 
+0

danke für die schnelle antwort. Ich habe versucht, die Logik, die Sie zur Verfügung gestellt, funktioniert es gut für die meisten, aber für ein paar Zahlen zum Beispiel 10034 gedruckt wird als 100.0000.00.34 usw. Ich versuche, Ihren Code in der Zwischenzeit zu verstehen, wollte nur Sie auch informieren. Schätze deine Hilfe. – Anusha

+0

sollte es als 100,34 gedruckt werden, wie ich gerade jetzt versucht habe ... Sie müssen mir eine größere Probe mit so etwas geben .. eine weitere Sache, würden die Zahlen durch das Leerzeichen getrennt sein? space10034space so? –

+0

In meiner Regex gibt es keine Capture-Gruppe ... alles, was ich tue, ist die Zahlen übereinstimmen .... matcher.group (0) entspricht der gesamten Regex ... das ist in diesem Fall nur Ziffern ... was ich Ich frage mich, ist, wenn Sie mein Format von "00.00" verwendet haben, wie kommt dann "100.0000.00.34" als Ergebnis .. es würde Ihnen helfen, können Sie mir die vollständige Beispiel Zeichenfolge, über die Sie den Code versucht haben –

0
  1. Split die Zeichenfolge in Word-Arrays mit Raumbasis
  2. prüft jedes Wort, ob es eine richtige Anzahl ist oder nicht.
  3. wenn es eine Zahl ein Flag gesetzt und auf Flag Basis anwenden, um Ihre Logik nach der Logik, das Wort in das Array
  4. Druck das gesamte Array als String oder verketten wie pro Ihre Anforderung
0
ersetzen Anwendung

Verwendung Pattern und Matcher können Sie die Positionen der Nummern finden.

Pattern pattern = Pattern.compile("\\d+"); 
Matcher matcher = pattern.matcher(yourStringGoesHere); 

while (matcher.find()) { 
    System.out.print("Start index: " + matcher.start()); 
    System.out.print(" End index: " + matcher.end() + " "); 
    System.out.println(matcher.group()); 
} 

Dann können Sie substring to add the period verwenden.

0

fand ich es here

public double isNumeric(String str){ 
    String number=""; 
    Double num=0; 
    for (char c : str.toCharArray()){ 
     if (Character.isDigit(c)){ 
     number+=c; 
     } 
    } 
    num = Double.parseDouble(number); 
    return num; //Then you can do whatever you want with this 
} 

Leider Englisch:/

Verwandte Themen