Wychwytywanie cyfr ze stringa

Odpowiedz Nowy wątek
2011-08-23 20:26
1

Witam,
już od kilku godzin pisze program i napisałem już sporą część a teraz chyba ze zmęczenie coś poplątałem chce napisać funkcję która ze stringa wyłapie same cyfry a wszystkie inne znaki usunie. Wymyśliłem coś takiego :D

String niesformatowanyNip(String nip){
        String wynik =new String();
 
        for(int i=0;i<nip.length();i++){
            if(Character.isDigit(nip.charAt(i))){
                wynik=wynik+Character.toString(nip.charAt(i));
            }
 
        }
        return wynik;
    }
 

I dostaje java.lang.NullPointerException
Proszę o rady i wskazówki.

Pozostało 580 znaków

2011-08-23 20:33
0

nie łatwiej zrobić drugiego stringa i do niego doklejać znaki które są cyframi, lub po prostu tablice intów i tam wrzucać od razu te cyfry?


░█░█░█░█░█░█░█░█░█░█░█░

Pozostało 580 znaków

2011-08-23 20:56
0

A czy ja tak nie zrobiłem "nip" to pierwszy string a "wynik" do drugi string i w wyniku chciałem doklejać kolejne cyfry.

sorry nie zerknęłem nawet na kod - krwq 2011-08-23 21:10

Pozostało 580 znaków

2011-08-23 21:08
abe
0

wszystko masz dobrze, wyjątek dostaniesz tylko jak nip będzie null.

Pozostało 580 znaków

2011-08-24 14:19
1

Ze względów wydajnościowych lepiej użyłbyś StringBuildera:

// String wynik =new String();
StringBuilder wynik = new StringBuilder();
 
// wynik=wynik+Character.toString(nip.charAt(i));
wynik.append(nip.charAt(i));
 
// return wynik;
return wynik.toString();
+1 Ogólnie to mi się podoba ten algorytm jest prosty i można sprawdzić jak ma się to w porównaniu do regex'ów "\d" - szypxx 2011-08-28 22:55

Pozostało 580 znaków

2011-08-25 14:59
0

a może StringBuilder + Scanner i nextInt() ?

Pozostało 580 znaków

2011-08-28 22:37
0

Proponuję zainteresować się wyrażeniami regularnymi. Zdobycie tej wiedzy z pewnością nie zaszkodzi a i w przyszłości może pomóc.

http://download.oracle.com/javase/tutorial/essential/regex/

Pozostało 580 znaków

2011-08-28 23:59
0

Jedynym miejscem, gdzie może lecieć NullPointerException to jest przypadek gdy podasz jako paramter null. Twoje rozwiązanie można nieco ulepszyć jak również wykorzystać wyrażenia regularne. Ponieważ robiłem już coś takiego, to dołączę implementację:

import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class RegexTest {
 
    public static void main(String[] args) {
        String source = "ala32890 ma 3 koty i 2 psy";
 
        System.out.println(RegexNumberFinder.class.getSimpleName() + " : " + new RegexNumberFinder().find(source));
        System.out.println(CharNumberFinder.class.getSimpleName() + " : " + new CharNumberFinder().find(source));
    }
}
 
interface StringFinder {
    String find(String source);
}
 
class CharNumberFinder implements StringFinder {
    @Override
    public String find(String source) {
        if (source == null || source.isEmpty()) {
            return "";
        }
        StringBuilder builder = new StringBuilder();
        for (char c : source.trim().toCharArray()) {
            if (Character.isDigit(c)) {
                builder.append(c);
            }
        }
        return builder.toString();
    }
}
 
class RegexNumberFinder implements StringFinder {
 
    private Pattern pattern;
 
    public RegexNumberFinder() {
        this("\\d+");
    }
 
    public RegexNumberFinder(String pattern) {
        this.pattern = Pattern.compile(pattern);
    }
 
    @Override
    public String find(String source) {
        if (source == null || source.isEmpty()) {
            return "";
        }
        StringBuilder builder = new StringBuilder();
        Matcher matcher = pattern.matcher(source);
        while (matcher.find()) {
            builder.append(matcher.group());
        }
        return builder.toString();
    }
 
    @Override
    public String toString() {
        return pattern.pattern();
    }
}

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0