Wychwytywanie cyfr ze stringa

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.

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?

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.

0

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

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();
0

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

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/

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();
    }
}

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