Hi,
Ich muss einen String darauf prüfen, ob er nur bestimmte Zeichen enthällt. Die Methode soll false zurückgeben, wenn der String nicht gültige Zeichen enthält.
Gültig sein sollen: '/' ' ' und die Zahlen 0..9
geschrieben habe ich folgenden Code.
Leider nimmt er aber nur Strings an, die '/' oder Leerzeichen enthalten. Zahlen sind grundsätzlich ungültig und führen zu false.
Ich hatte es auch schon über isDigit() versucht, aber selbst da sind die eingegebenen Zahlen falsch.
Du prüfst damit ob dein Substring genau [0-9] matcht. [0-9] ist genau eine Zahl, du hast sicherlich den quantor vergessen? Das sollte vermutlich [0-9]+ heißen oder?
Jeder String, in welchem eine Zahl enthalten ist ungültig. Gültig dagegen sind Strings bestehend aus / und/oder Leerzeichen
@EikeB: Das habe ich jetzt nicht verstanden =(
Mir geht es doch genau darum, ob am Index i genau EINE Zahl steht.
Die anderen beiden Zeichen sind dann ja schon geprüft und waren dort nicht vorhanden. Folglich darf an dieser Stelle nur noch eine Zahl (0-9) stehen.
Ich kann dich nur noch einmal bitten, dass du eine Liste schreibst von String sdie gueltig sind und andere die ungueltig sind, denn auf der einen Seite
heist deine Methode telefonNrTest sodass ich annehme, dass du testen moechtest ob ein String einen Telefonnummer ist, auf der anderen Seite schreibst du :
Jeder String, in welchem eine Zahl enthalten ist ungültig.
Hier mal eine Debug-Ausgabe meinerseits...das Problem scheint nicht an den Zeichen selbst zu liegen. Kann damit jemand was genaueres anfangen?
Debug: String: 1234 / 567890
Debug: Char: 1
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: No such child: 9
at java.awt.Container.getComponent(Unknown Source)
at org.salespointframework.desktop.JOptionPanel$OptionLayout.preferredLayoutSize(JOptionPanel.java:114)
at org.salespointframework.desktop.JOptionPanel$OptionLayout.layoutContainer(JOptionPanel.java:150)
at java.awt.Container.layout(Unknown Source)
at java.awt.Container.doLayout(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validate(Unknown Source)
at javax.swing.RepaintManager.validateInvalidComponents(Unknown Source)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Debug: String: 0160 / 123456
Debug: Char: 0
Debug: Char: 1
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: No such child: 9
at java.awt.Container.getComponent(Unknown Source)
at org.salespointframework.desktop.JOptionPanel$OptionLayout.preferredLayoutSize(JOptionPanel.java:114)
at org.salespointframework.desktop.JOptionPanel$OptionLayout.layoutContainer(JOptionPanel.java:150)
at java.awt.Container.layout(Unknown Source)
at java.awt.Container.doLayout(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validate(Unknown Source)
at javax.swing.RepaintManager.validateInvalidComponents(Unknown Source)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Edit: ja, es geht um TelefonNummern genau (und bitte sagt jetzt nicht NamingConvention, da MethodenName nicht englisch ... wir haben intern leider eine anderen Konvention -.-)
Mit meiner Aussage meinte ich vorhin:
"Das Programm betrachtet offenbar alle Strings mit Zahlen darin als falsch" -
nach meiner Debug-Ausgabe stelle ich aber fest, dass das Programm immer schon nach einem oder zwei Werten eine OutOfBounds wirft ... ich finde dieses OutOfBounds aber nicht... das Array sollte doch eine enstprechende länge haben, oder?
würde ich das Ganze irgendwie anders lösen (VHIDT !!) :
Java:
publicbooleantelefonNrTest(String s){for(int i =0; i < s.length(); i++){if((s.charAt(i)!='/')&&(s.charAt(i)!=' ')&&(!isDigit(s.charAt(i))){returnfalse;}}returntrue;}
Mit der von Dir umgesetzten Methode hat es jetzt funktioniert, danke.
Ich würde dennoch gerne verstehen, wo der Fehler in der vorherigen Lösung liegt? =)
Du prüfst damit ob dein Substring genau [0-9] matcht. [0-9] ist genau eine Zahl, du hast sicherlich den quantor vergessen? Das sollte vermutlich [0-9]+ heißen oder?
Mit der von Dir umgesetzten Methode hat es jetzt funktioniert, danke.
Ich würde dennoch gerne verstehen, wo der Fehler in der vorherigen Lösung liegt? =)