Char[] to string
Barteq - 14-05-2006 00:49
Char[] to string
Witam, Mam problem z zamianą tablicy znaków Char na stringa. Znalazlem w internecie jakies przyklady ale niestety program nie chce sie skompilowac poprawnie. Bede wdzieczny za kazda podpowiedz.
Barteq - 14-05-2006 00:49
int i; for (i=0; i<6; i++){ sdolar = new Character(bufd[i]).toString();
} Napisalem taka petle, jest jednak problem bo pod zmienna sdolar chcialbym miec caly napis a nie tylko ostatnia litere, Jak zrobic zeby cala zmienna byla przechowywana pod nazwa sdolar? Pozdrawiam
lobo - 14-05-2006 00:49
int i; for (i=0; i<6; i++){ sdolar = sdolar + new Character(bufd[i]).toString();
}
pozdrawiam lobo
Zbyszek Malec - 14-05-2006 00:49
Barteq wrote (tak! stara dobra wrotka!):
> Mam problem z zamianą tablicy znaków Char na stringa. Znalazlem w > internecie jakies przyklady ale niestety program nie chce sie skompilowac > poprawnie. Bede wdzieczny za kazda podpowiedz.
Nie ma czegoś takiego jak Char (przynajmniej nie w standardowej javie). Jest char i Character. Jeśli masz tablicę char[] to String posiada odpowiedni konstruktor. Jeśli masz tablicę Character[] to zamiast tworzyć 100 stringów pomocniczych lepiej skorzystać ze StringBuildera (ewentualnie StringBuffera).
StringBuilder builder = new StringBuilder(table.length); for(...) { builder.append(tab[i]); }
String result = new String(builder);
Tablica Character[] jest swoją drogą podejrzana. Skąd ty ją masz?
-- Zbigniew Malec Ustronie:104 gg:2756100 "Do badań stosowane będą wysokorozdzielcza elektroforeza kapilarna i wysokoczuły spektrometr mas z plazmą indukcyjnie sprzężoną połączone za pomocą aspirującego mikronebulizera."
Zbyszek Malec - 14-05-2006 00:49
lobo wrote (tak! stara dobra wrotka!):
> int i; > for (i=0; i<6; i++){ > sdolar = sdolar + new Character(bufd[i]).toString(); > > }
To jest trochę straszne rozwiązanie.
-- Zbigniew Malec Ustronie:104 gg:2756100 "Do badań stosowane będą wysokorozdzielcza elektroforeza kapilarna i wysokoczuły spektrometr mas z plazmą indukcyjnie sprzężoną połączone za pomocą aspirującego mikronebulizera."
Barteq - 14-05-2006 00:49
Dziekuje za pomoc, oczywiście mam tablice char[]. Uzywam takiej funkcji: char bufd[] = new char[31 - 25]; str.getChars(25, 31, bufd, 0); W ten sposob pobieram odpowiednie dane z interesujacego mnie pliku tekstowego, ponieaz te dane potrzebne mi sa do wykonania na nich operacji matematycznych, musze je zamienic na stringa, pozniej na zmienna typu float. Moze to troche nieprofesjonalne rozwiazanie, ale niestety nie znam innego. Jestem poczatkujacym programista.
Pozdrawiam
Piotr Kalinowski - 14-05-2006 00:49
Barteq napisał(a): > Dziekuje za pomoc, oczywiście mam tablice char[]. Uzywam takiej funkcji: > char bufd[] = new char[31 - 25]; > str.getChars(25, 31, bufd, 0); > W ten sposob pobieram odpowiednie dane z interesujacego mnie pliku > tekstowego, ponieaz te dane potrzebne mi sa do wykonania na nich > operacji matematycznych, musze je zamienic na stringa, pozniej na > zmienna typu float. Moze to troche nieprofesjonalne rozwiazanie, ale > niestety nie znam innego. Jestem poczatkujacym programista.
Zamiast wyciągać tablicę znaków, a później zamieniać ją na String, możesz użyć funkcji substring(int, int): String sub = str.substring(25, 31);
Zobacz też: http://java.sun.com/j2se/1.4.2/docs/...ing(int,%20int)
Pozdrawiam
Zbyszek Malec - 14-05-2006 00:49
Barteq wrote (tak! stara dobra wrotka!):
> Dziekuje za pomoc, oczywiście mam tablice char[]. Uzywam takiej funkcji: > char bufd[] = new char[31 - 25]; > str.getChars(25, 31, bufd, 0);
Pokaż większy kawałek kodu, bo to wygląda trochę przekombinowanie.
> W ten sposob pobieram odpowiednie dane z interesujacego mnie pliku > tekstowego, ponieaz te dane potrzebne mi sa do wykonania na nich operacji > matematycznych, musze je zamienic na stringa, pozniej na zmienna typu > float. Moze to troche nieprofesjonalne rozwiazanie, ale niestety nie znam > innego. Jestem poczatkujacym programista.
A jaki format ma ten plik? Pokaż kawałek, może da się go jakoś łatwiej wczytywać (np. klasą Scanner).
-- Zbigniew Malec Ustronie:104 gg:2756100 "Do badań stosowane będą wysokorozdzielcza elektroforeza kapilarna i wysokoczuły spektrometr mas z plazmą indukcyjnie sprzężoną połączone za pomocą aspirującego mikronebulizera."
Barteq Barteq - 14-05-2006 00:49
plik ma format .txt Oto kod, chcialbym zaznaczyc ze program juz dziala, jestem przekonany ze mozna to zrobib bardziej profesjonalnie, na razie nie wiem jednak jak try { //url = new URL("http://bankowy.wp.pl/waluty.html?POD=1&b=2&bankN=&d1="+data+""); url = new URL("http://www.nbp.pl/Kursy/KursyA.html"); InputStreamReader in = new InputStreamReader(url.openStream()); BufferedReader br = new BufferedReader(in); // Deklarujemy bufor i łączymy go ze strumieniem FileWriter fw = new FileWriter(""+data+".txt"); BufferedWriter bw = new BufferedWriter(fw); int i=0; while (true) //zpisujemy odpowiednie dane do pliku { line = br.readLine(); i++; if (i==65) bw.write(i + " Euro " + line + " "); if (i==45) bw.write(i + " Dolar " + line + " "); if (i==150) bw.write(i + " Rubel " + line + " "); if (i==100) bw.write(i + " Korona czeska " + line + " "); if (i==75) bw.write(i + " Frank szwajcarski " + line + " "); if (i==151 ) break;
} br.close(); bw.close(); } catch(IOException f) { System.err.println("Błąd " + e); } //otwieramy plik i pobieramy interesujace tablice znakow
try { BufferedReader in = new BufferedReader(new FileReader(""+data+".txt")); String str; while ((str = in.readLine()) != null) {
char bufd[] = new char[31 - 25]; str.getChars(25, 31, bufd, 0);
Zbyszek Malec - 15-05-2006 00:09
Barteq Barteq wrote (tak! stara dobra wrotka!):
> plik ma format .txt
To jest tylko rozszerzenie. Mi chodziło o sposób ułożenia danych w pliku.
> Oto kod, chcialbym zaznaczyc ze program juz dziala, > jestem przekonany ze mozna to zrobib bardziej profesjonalnie, na razie nie > wiem jednak jak
Przede wszystkim powinieneś rozdzielić funkcjonalność pomiędzy metody. Jak byś nazwał metodę która wykonuje to co opisałeś? Moim zdaniem dobrą nazwą było by: PołączSięPobierzDaneZNetuPotemZapiszDoPlikuANAstęp niePrzetwórzTeDane();
Moim zdaniem za długa. Masz tu conajmniej kilka niezależnych funkcjonalności i ja bym to rozdzielił.
class CurrencyClient { public void connect() throws IOException; public List<Currency> readData() throws IOException; //ewentualnie Map czy coś innego public void disconnect() throws IOException; }
Zapisywanie do pliku i odczyt zrzuciłbym na oddzielną klasę. Przetwarzanie tych danych na jeszcze inną.
> try { > //url = new > URL("http://bankowy.wp.pl/waluty.html?POD=1&b=2&bankN=&d1="+data+""); > url = new URL("http://www.nbp.pl/Kursy/KursyA.html");
Generalnie nie jest dobrą praktyką takie hardkodowanie stałych. Lepiej umieścić je w jakichś zmiennych (np final) i z nich korzystać. Jak będziesz chciał wprowadzić zmiany, będzie ci dużo łatwiej.
> InputStreamReader in = new InputStreamReader(url.openStream()); > BufferedReader br = new BufferedReader(in); // Deklarujemy bufor i > łączymy go ze strumieniem > FileWriter fw = new FileWriter(""+data+".txt"); > BufferedWriter bw = new BufferedWriter(fw); > int i=0; > while (true) //zpisujemy odpowiednie dane do pliku > { > line = br.readLine();
Tu nie jest za dobrze. Nie sprawdzasz rezultatu tego readLine. A co jeśli strumień się skończy i dostaniesz null?
> i++; > if (i==65) bw.write(i + " Euro " + line + " "); > if (i==45) bw.write(i + " Dolar " + line + " "); > if (i==150) bw.write(i + " Rubel " + line + " "); > if (i==100) bw.write(i + " Korona czeska " + line + " "); > if (i==75) bw.write(i + " Frank szwajcarski " + line + " "); > if (i==151 ) break;
To jest bardzo podejrzane. Jest taki antywzorzec zwany "magic numbers". Zdecydowanie powinieneś unikać takich stałych w kodzie. Jeśli musisz to robić w taki sposób, to chociaż trzymaj je w zmiennych.
> } > br.close(); > bw.close(); > } > catch(IOException f) { > System.err.println("Błąd " + e); > } > //otwieramy plik i pobieramy interesujace tablice znakow
Po co zapisywać dane do pliku a zaraz po tym z niego czytać? Nie lepiej wczytać dane, zapamiętać je gdzieś (np. w List albo Map czy co tam nie potrzebujesz) a potem dopiero zapisać je do pliku (o ile potrzebujesz kopii na dysku w ogóle)?
> try { > BufferedReader in = new BufferedReader(new > FileReader(""+data+".txt")); > String str; > while ((str = in.readLine()) != null) { > > char bufd[] = new char[31 - 25]; > str.getChars(25, 31, bufd, 0);
Jak już ktoś napisał powinieneś raczej użyć metody substr z klasy String. result = str.substr(25, 31);
No i nie sprawszasz czy str nie jest nullem (co sugeruje dokumentacja do metody readLine klasy BufferedReader).
-- Zbigniew Malec Ustronie:104 gg:2756100 "Do badań stosowane będą wysokorozdzielcza elektroforeza kapilarna i wysokoczuły spektrometr mas z plazmą indukcyjnie sprzężoną połączone za pomocą aspirującego mikronebulizera."
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[postgresql] kilka =?ISO-8859-2?Q?rekord=F3w_subquery_jako_?==?ISO-8859-2?Q?string?=
String line; if (line=="cos"){...}....problem
[Oracle] =?ISO-8859-2?Q?=A3=B1czenie_wierszy_z_zapytania_?==?ISO-8859-2?Q?w_jeden_string?=
Variable type (position <number>) in EXECUTE STATEMENT '<string>' INTO does not match returned column type
Problem z funkcja mysql_real_escape_string() na bazie mysql
[psql] Funkcja =?ISO-8859-2?Q?=B3=B1cz=B1ca_stringi?=
Sql Serv 2000 - String z lista parametrem funkcji ?
[pl/sql] usuwanie znaku nowej lini ze stringa
Firebird 1.5, Invalid argument in EXECUTION STATEMENT - cannot convert to string
[oracle] jak wyciągnąć jeden znak ze stringa/zmiennej?
zanotowane.pldoc.pisz.plpdf.pisz.plsulimczyk.pev.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|