如何在Java中仅使用charAt(),length()和/或toCharArray()从字符串中提取数字

时间:2010-10-03 17:49:30

标签: java

我必须为我的java类中的赋值执行此操作。我一直在寻找一段时间,但只能找到正则表达式等解决方案。

对于我的作业,我只能使用charAt(),length()和/或toCharArray()。我需要从像gu578si300这样的字符串中获取例如数字,这样它就会变成:578300。

我知道ASCII中的数字是48 - 57,但我无法弄清楚如何在java中执行此操作。你们有什么想法吗?

我正在考虑一个for循环来检查(int)char是否介于48-57之间,如果是,则将值放入一个单独的数组中。 Howeevr我不知道如何编程最后一件事。

我现在有了这个;

public static String filterGetallenreeks(String reeks){
    String temp = "";

    for (char c : reeks.toCharArray()) {
        if ((int) c > 47 && (int) c < 58)
            temp += c;
        }

    return temp;

然而它不起作用,它只是输出相同的内容。

这是我的主题中看起来像这样的东西。如果我是正确的回归温度;将临时字符串返回到主右边的reeks字符串中?为什么我的输入仍然是相同的输出?

    public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);

    System.out.println("Voer een zin, woord of cijferreeks in:");
    String reeks = sc.nextLine();

    if (isGetallenreeks(reeks)){
        System.out.println("is getallenreeks");
        filterGetallenreeks(reeks);
        System.out.println(reeks);
    }

3 个答案:

答案 0 :(得分:2)

由于这是作业,我不会提供完整的解决方案,但是,这就是你应该如何去做的:

执行一个for循环,迭代字符串中的字符总数(.length)。使用charAt和isDigit方法检查字符是否为数字。

答案 1 :(得分:1)

这似乎是一种合理的方法,但我会根据您的建议做出一些改变:

  • 如果您需要以字符串形式结果,请使用StringBuilder而不是数组。
  • 使用'0''9'等字符文字代替ASCII代码,使代码更具可读性。

<强>更新

您的代码的具体问题是这一行:

temp = temp + (int)c;

将字符转换为ASCII值,然后将其转换为包含ASCII值的十进制字符串。那不是你想要的。请改用:

temp += c;

答案 2 :(得分:1)

您可以执行一个循环来检查字符串中的字符,如果它是一个数字,则将其附加到另一个字符串:

//I haven't tested this, so you know.
String test = "gu578si300 ";
String numbers = "";
for(int i=0; i<test.length(); i++){
   if("0123456789".indexOf(test.charAt(i)) // if the character at position i is a number,
      numbers = numbers + test.charAt(i);  // Add it to the end of "numbers".
}
int final = Integer.parseInt(numbers);     // If you need to do something with those numbers,
                                           // Parse it.

请告诉我这是否适合您。