String pruefen ob nur 0 und 1 enthaelt

Status
Nicht offen für weitere Antworten.

Werz

Mitglied
Hallo Forum,

gibt es eine elegante Moeglichkeit eine Stringvariable darauf zu pruefen, ob sie nur 0en und 1en enthaelt?

Gruss
Werz
 
Alles klar. Kein Problem, habe meine Frage auch noch ein wenig editiert, hoffe sie ist nun klarer.
Gruss
Werz
 
mit einer for-Schleife, length() & charAt() kommst du an jedes Zeichen, das du dann mit dem Zeichen 0 oder 1 vergleichen kannst,
klingt doch gar nicht so dumm,
auch wenn es eine entsprechende Operation schon gäbe kann die auch nicht viel mehr machen,
das kann man dann doch genausogut selber versuchen
 
Sehe ich auch so. Schau dir mal die regulären Ausdrücke an, damit solltest du dein Problem ganz einfach lösen können.
 
Am Besten noch per Webservice im Netz berechnen lassen. 😉
Kann man es nicht etwas simpler versuchen ?
Code:
try{
java.math.BigInteger bI = new java.math.BigInteger(<String>, 2);
}catch( NumberFormatException e){
... 
}


-- -- muckelzwerg
 
schon klar, viele Wege fuehren nach Rom, aber das soll doch
hoffentlich ein Witz sein! (Ausserdem fehlerhaft)
 
Warum sollte das ein Witz sein ?
Was meinst Du mit fehlerhaft ? "vollständig" ist es nicht, das mag sein.

-- -- muckelzwerg
 
Das mit den Exceptions ist eine Sache, darüber kann man vielleicht noch streiten, aber du erkennst "-101.." an, was
def. nicht richtig ist (nur 0en und 1en).

Ich verstehe nicht, warum du einen Moloch wie BigInteger
benutzen willst, um einen simplen String zu erkennen!
Und warum sollte das *einfacher* sein als meine Lösung?
 
Hallo, ich versuchte mal das problem mit einem eigenen Algorithmus zu lösen, nur klappt das nicht. Kann mir mal jemand sagen warum dies nicht funzt?

Code:
public class Main {
	public static void main (String[]args){
		
		String str = "1001";
		
		char[] c_array = new char[str.length()];
		c_array = str.toCharArray();
		
		for(int i=0; i<str.length(); i++){
			if(c_array[i] != (char) 0 && c_array[i] != (char) 1 ){
				System.out.println("Bitte eine Binärzahl eingeben");
				break;
			}
		}
		
	}

}

Vergleiche ich die charvariabeln falsch miteinader?
 
Hi,
du solltest mit '0' und '1' statt mit den gecasteten int-Werten arbeiten, wenn du diesen Algorithmus beibehalten willst.
 
und ausserdem ist die umwandlung in ein chararray unnötig. Mit der charAt(int) Methode vom String kannst du auch auf jedes zeichen zugreiffen
 
Danke Jungs, ich habs nochmal korrigiert. Jetzt sollt es stimmen, oder?

Code:
public class Main {
	public static void main (String[]args){
		
		String str = "110011";					//Zu Ueberpruefender String
		System.out.println(isItBinary(str));	//Function Aufruf und Ausgabe
		
	}

	private static boolean isItBinary(String str) {		
		boolean b = true;
		for(int i=0; i<str.length(); i++){
			//Ueberprüfung: Wenn nicht Binarystring
			if (str.charAt(i) != '0' && str.charAt(i) != '1'){
				b = false;
				return b;
			}
		}
		return b;
	}
	
	
}

PS: Ich meld mich mal im Forum an 🙂
 
@ Jörg : Ich habe nicht "einfacher" geschrieben, weil es nicht "einfacher" ist.
Ich meinte wirklich "simpler". Simpler deshalb, weil man Code wiederverwendet, der (evtl.) dafür da ist, und man nicht eine oder zwei Funktionen baut, die am Ende doch wieder fast das Gleiche machen.
Zu "Deiner" Lösung habe ich zudem überhaupt nichts gesagt,
hier steht ja noch nicht einmal was Konkretes zu Regexp, und der Threadstarter hat Deine Frage auch noch nicht beantwortet.

BigInteger ist natürlich nicht Pflicht, dann nimmt man eben einen int und "Integer.parseInt(<String>,2)" .

Was genau man einsetzt hängt von der Situation ab.
Vielleicht wirft man sowieso eine eigene Exception, wenn der String
"unpassend" ist, vielleicht will man den Wert auch erst testen, um ihn danach zu parsen, dann machen die erwähnten Funktionen noch mehr Sinn.
Es sollte doch eigentlich Sinn der Sache sein, verschiedene Wege aufzuzeigen, vor allem, wenn nicht klar ist, was die genaue Anforderung ist, bzw. vor dem Hintergrund, dass hier dauernd auf die Suchfunktion verwiesen wird.
Ich habe bewusst nicht geschrieben "Warum machst Du nicht ... ?" sondern gefragt, ob es anders nicht auch geht.
Ich habe noch nicht einmal behauptet, dass dieser Weg besser oder passender ist, das soll der Threadersteller entscheiden.

-- -- muckelzwerg
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben