2016-08-05 14 views
4

ich auf Galaxy S arbeiten müssen einige Zeichen aus einer Zeichenfolge entfernen. Momentan versuche ich '' (Leerzeichen) und '-' (Bindestrich) zu entfernen. Ich habe zwei Möglichkeiten ausprobiert. Beide arbeiten an einem Nexus 5X mit Android N Beta. Keiner von ihnen arbeiten auf einem Samsung Galaxy S 6 mit Android M.Matcher.replaceAll() und String.replaceAll() scheinen nicht 6

Erster Ansatz:

String normalizedNumber = phoneNumber.replaceAll("[ -]", ""); 

Zweiter Ansatz:

Pattern pattern = Pattern.compile("[ -]"); 
String normalizedNumber = pattern.matcher(phoneNumber).replaceAll(""); 

Wie kann eine solche Basisklassen geben unterschiedliche Ergebnisse? Was mache ich falsch?

Proof (Debugger Screenshots, auf verschiedenen PCs gemacht, das ist, warum die andere sind gestylt):

Hier Nexus

Nexus Hier ist Samsung

Samsung

+0

Sind Sie absolut sicher, dass der Code, Programmablauf und geben Sie das gleiche für alle Geräte sind? – SamTebbs33

+0

Das scheint sehr unwahrscheinlich. Können Sie beweisen, dass dies geschieht? – shmosel

+0

@ SamTebbs33 gleichen Code wie ich sie auf beiden Geräten mit Android Studio auf meinem Schreibtisch installieren. Gleicher Programmablauf, dieser wird nur einmal aufgerufen und ich setze sofort einen Haltepunkt. – nvn

Antwort

0

Mistery gelöst. Wenn Sie String.charAt() verwenden, um die Zeichenfolge zu analysieren, stellt sich heraus, dass die Leerzeichen doch keine einfachen Leerzeichen waren, sondern "non breaking spaces" (Code 160). Änderung des Codes alle Leerzeichen es fest zu entfernen:

String normalizedNumber = phoneNumber.replaceAll("[\\s-]", ""); 

Der Code gab unterschiedliche Ergebnisse auf verschiedenen Telefonen, weil die Zahlen aus dem Kontakt Picker Intent kam. Es scheint, Samgung Handys speichern die Räume in anderen Zahlen als Nexus-Handys.

Vielen Dank für Ihre Hilfe.

https://en.wikipedia.org/wiki/Non-breaking_space

1

Könnten Sie bitte versuchen, mit Ansatz 1 mit der folgenden Änderung:

String normalizedNumber = phoneNumber.replace(" ","").replace("-",""); 

Hoffnung sollte dies als einen direkten Charakter Ersatz Ansatz in jeder Umgebung arbeiten, wo, wie replaceAll ist immer eine kompilierte Muster Ansatz, um die Zeichen der Anpassung

+0

Ich bin mir ziemlich sicher, dass das funktionieren wird, danke. Ich werde dies am Montag versuchen, da das Samsung-Telefon mein Mitarbeiter ist, nicht meins. – nvn