繁体   English   中英

如何从字符串中获取整数?

[英]How do I get integers from a string?

我对Java还是很陌生,我一直在Java类中遇到问题。

设计并编写一个applet,以搜索文本中的一位数字并将其更改为相应的单词。 例如,字符串“ 4 score and 7 years ago”将被转换为“ 4 score and 7 years ago”。 或者,如果输入的内容是“棒球比赛有27个出局”,它将变成“棒球比赛有2个有7个出局”。

我已经创建了applet,它开始运行。 我还这样做了,如果在输入中输入了一个数字(0到99之间),它会将其转换为文本(例如4到4),但是我无法获取它来检测字符串中的数字,例如上面的数字。
我将如何使其能够读取字符串并实际检测其中的整数?

这是我没有GUI组件的情况:

private static final String[] numberNames = { "zero", "one", "two", "three", "four",
                                              "five", "six", "seven", "eight", "nine"};
private static String convertNumber(int number) {
      String num;

        if (number % 10 < 10){
          num = numberNames[number % 10];
          number /= 10;
        }
        else {
          num = numberNames[number % 10];
          number /= 10;
        }
        if (number == 0) return num;
        return numberNames[number] + "-" + num;
      }

您不想为此类使用static final String数组。 它将起作用,但是您越早使用enum ,您就越会成为一名程序员。

NumberEnum.java

public enum NumberEnum {
  ZERO ("zero"),
  ONE ("one"),
  TWO ("two"),
  THREE ("three"),
  FOUR ("four"),
  FIVE ("five"),
  SIX ("six"),
  SEVEN ("seven"),
  EIGHT ("eight"),
  NINE ("nine"),
  TEN ("ten");

  private String text;
  private static final NumberEnum[] elements = NumberEnum.class.getEnumConstants();

  private NumberEnum(String text) {
    this.text = text;
  }

  public String getText() {
    return text;
  }

  public static NumberEnum getFromDigit(int index) {
    if (index < 0 || index > 9) return null;
    return elements[index];
  }
}

DigitReplace.java

public class DigitReplace {
  public static void main(String... args) {
    System.out.println(convertString("4 score and 7 years ago"));
    System.out.println(convertString("3 days ago I ate 173 cheeseburgers"));
  }

  public static String convertString(String input) {
    StringBuilder output = new StringBuilder(input.length() * 2);

    boolean foundOne = false;

    // for every character
    for(char c : input.toCharArray()) {
      // if it's a digit
      if (Character.isDigit(c)) {
        // if this is not the first digit, put a dash
        if (foundOne) {
          output.append('-');
        }

        NumberEnum thisWord = NumberEnum.getFromDigit(c - '0');
        output.append(thisWord.getText()); // 

        foundOne = true;
      } else {
        // just add the character
        foundOne = false;
        output.append(c);
      }
    }

    return output.toString();
  }
}

输出量

four score and seven years ago
three days ago I ate one-seven-three cheeseburgers

您可以使用正则表达式提取数字(了解有关数字),Pattern和Matcher类对此非常有用。

之后,您可以使用HashMap将数字映射为数字,如下所示

LinkedHashMap<Integer, String> numbers = new LinkedHashMap<Integer, String>();
numbers.put(10, "ten");
numbers.put(11, "eleven");
...And so on...

最后,当您从原始String中减去了数字后,请用replace方法替换它们

myString.replaceAll(x, numbers.get(x));

注意以上几点,您应该考虑替换整个单词,就像文本编辑器一样。

希望这对您有帮助。 阅读有关正则表达式,HashMaps或字典(以及类似的东西,您会看到的)的知识,并进行大量测试,您将从遇到的每一个问题中学习,就像我描述的替换整个单词中描述的小问题一样。 祝好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM