首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从字符串中获取整数?

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

Stack Overflow用户
提问于 2013-04-29 02:54:51
回答 2查看 245关注 0票数 0

我是Java的新手,在Java类中遇到了一个问题。

设计并编写一个applet,用于搜索文本中的单位数,并将其更改为相应的单词。例如,字符串“4得分和7年前”将转换为“4得分和7年前”。或者,如果输入是“一场棒球比赛有27个出局”,它将变成“一场棒球比赛有2-7个出局”。

我创建了小程序,它运行起来了。我也这样做,如果在输入中输入一个数字(介于0到99之间),它会将其转换为文本(比如4到4),但我不能让它检测上面字符串中的数字。

我该如何让它能够读取字符串并实际检测其中的整数?

以下是我在没有GUI组件的情况下所拥有的内容:

代码语言:javascript
运行
复制
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;
      }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-29 03:26:00

对于这样的事情,您不希望使用static final String数组。这是可行的,但是你越早习惯于使用enum版本,你就越能成为一个更好的程序员。

NumberEnum.java

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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();
  }
}

输出

代码语言:javascript
运行
复制
four score and seven years ago
three days ago I ate one-seven-three cheeseburgers
票数 1
EN

Stack Overflow用户

发布于 2013-04-29 03:05:47

您可以使用正则表达式来提取数字(阅读有关它们的内容),Pattern和Matcher类对此很有用。

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

代码语言:javascript
运行
复制
LinkedHashMap<Integer, String> numbers = new LinkedHashMap<Integer, String>();
numbers.put(10, "ten");
numbers.put(11, "eleven");
...And so on...

最后,当您从原始字符串中减去数字时,用replace方法替换它们

代码语言:javascript
运行
复制
myString.replaceAll(x, numbers.get(x));

注意上面的内容,你应该像文本编辑器一样考虑替换整个单词。

希望这篇文章能很好地指导你。阅读正则表达式,HashMaps或字典(以及其他类似的东西,你会看到),并进行大量的测试,你会从你在做这件事时遇到的每个问题中学到东西,就像我描述的替换整个单词的小问题一样。祝好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16266503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档