w zmiennej String abc mam taki ciąg znaków: “0a2”. Chciałbym zapisać każdy znak do oddzielnej zmiennej to znaczy żeby “0” było w zmiennej “int a”, litera “a” była w zmiennej “String b” itd. Da się coś takiego zrobić?
Z góry wiadomo, że teksty będą jednoliterowe? Znany jest z góry jakiś format tego napisu, który chcesz rozdzielać? Gdyby np. tekst zawsze był w formacie cyfra-liera-cyfra to nie ma problemu
String abc = "0a2";
int a = Character.digit(abc.charAt(0), 10);
String b = abc.substring(1, 2);
int c = Character.digit(abc.charAt(2), 10);
Jeśli format nie jest znany to musiałbyś zapisywać do tablic/list int-ów/String-ów. Jeśli napisy/cyfry mogą być wieloliterowe to musiałbyś obliczać odpowiednio argumenty dla substring a wartości liczb obliczać np. za pomocą Integer.parseInt(String).
Ja bym proponował pokombinować ze StreamTokenizer-em. Co prawda wychodzi z użycia, ale to najlepsze co mi się udało wymyśleć. Przy użyciu tego, będziesz mógł ze Stringa po kolei wyłuskać wszystkie liczby niezależnie od sługości ciągu.
Pozdrawiam
Edit:
A nawet łatwiej:
package tests;
public class Runner
{
public static void main(String[] args)
{
String abc = "1t2bg3";
for(int i=0;i
{
if(Character.isDigit(abc.charAt(i)))
System.out.println(abc.charAt(i));
}
}
}
Sorry, że odkopuję temat, ale mam jeszcze jedno pytanie z nim związane.
Mianowicie:
tym razem w Stringu mam coś takiego:
v -11.785661 1.532853 -2.402584
v -1.785662 1.532853 -2.402582
v 3.214337 1.532853 7.597418
Tutaj z każdej linijki muszę odczytać literę oraz trzy liczby.
Czego dokładnie nie wiem:
jak odczytać liczby skoro nie znam ich długości
jak przeskoczyć na drugi wiersz gdy odczytałem już pierwszy? EDIT pytanie nie ważne bo podejrzewam że stringi i tak to wszystko w jednym ciągu trzymają
Mógłbym to zrobić tak jak kolega ptasior pokazał. Mógłbym po prostu sprawdzać gdzie są spacje dzięki czemu oddzieliłbym wszystkie liczby i litery. Lecz nadal nie wiem jak odzyskać same liczby.
A czy jest możliwość odczytania liczb od miejsca do miejsca? Tzn. chciałbym odczytać wszystkie liczby od znaku powiedzmy pierwszego(tj. “v”) do np znaku czterdzistego pierwszego (tj. np. “q”). I program od tego miejsca do wskazanego będzie odczytywał liczby.
więc wpierw przytnij linię do 41 znaków i wyszukaj liczby
czyli
String s = "v -11.785661 1.532853 -2.402584";
s =s.substring(0,41); //tutaj sprawdź bo piszse z palca mogę coś przekręcić w parametrach funkcji.
Pattern pat = Pattern.compile("-?[0-9]+\\.[0-9]+");
Matcher mat = pat.matcher(s);
while (mat.find()) {
System.out.println("Match: " + mat.group());
}
napisałem Ci w jednym poście abyś poczytał o wyrażeniach reguralnych a skoro piszesz w javie to najlepiej żebyś zrobił to pod kątem tego języka.
na ostanie pytanie masz gotową odpowiedż w potrzednich postach.
Wzorzec:
Pattern pat = Pattern.compile("-?[0-9]+\\.[0-9]+");
wyszukje w zadanym stringu podciąg który na początku może mieć znak ‘-’ (część ‘-?’) następnie ciąg cyfr z przedziału 0-9 co najmniej raz ([0-9]+) następnie kropkę (’\.’) i potem co najmniej jedną cyfrę z przedziału 0-9. natomiast fragment
mat.find()
zwraca wartość boolowską czyli mówi czy taki podciąg istnieje w danym stringu czy nie.
więc zamist while dajesz if i masz sprawdzenie czy występuje dany wzorzec w zadanym stringu.