【问题标题】:Parsing String to Integers将字符串解析为整数
【发布时间】:2017-04-18 23:24:36
【问题描述】:

我的构造函数有问题。我正在传递一个字符串,我想得到所述字符串的整数值。

字符串看起来像[a2, a3][a4, a6][a10, a22]

我想首先摆脱 a,我已经完成了,但我正在努力将 2、3、4、6、10、22 等转换为整数。我的猜测是遍历字符串并解析出不是逗号或 [, 或 ] 的数据,但我正在摸索转换。这就是我目前所拥有的。

public Converter(String str) {
     String getRidOfAPrefix = str.replaceAll("a", "");
     for (int i = 0; i < getRidOfAPrefix.length(); i++) {
         char charactersOfString = getRidOfAPrefix.charAt(i);
         if (charactersOfString == '[') {
           // A bit lost here

如果有任何提示,我将不胜感激。我已经为此苦苦挣扎了好几个小时。

【问题讨论】:

    标签: java parsing split


    【解决方案1】:

    选项 1,在 ][ 上拆分,然后在 , 上拆分,然后使用正则表达式替换所有非数字。喜欢,

    String str = "[a2, a3][a4, a6][a10, a22]";
    for (String x : str.split("\\]\\[")) {
        for (String s : x.split("\\s*,\\s*")) {
            System.out.println(s.replaceAll("\\D", ""));
        }
    }
    

    选项 2,使用 Pattern 查找与 a 后跟数字匹配的所有内容。然后使用循环获取所有匹配项,从第二个字符中获取子字符串(跳过a)。喜欢,

    Pattern p = Pattern.compile("a\\d+");
    Matcher m = p.matcher(str);
    while (m.find()) {
        System.out.println(m.group().substring(1));
    }
    

    两个选项输出

    2
    3
    4
    6
    10
    22
    

    【讨论】:

    • 喜欢你使用拆分方法的方式。
    【解决方案2】:

    这是一种方法,但我称之为 hack。请注意使用方式。

    您可以删除右括号和空格,因为它们只是我们的方式。之后我们有类似“[2,3[4,6[10,22”]的东西。如您所见,每个数字现在只有一个分隔符。因此,我们可以对 "[" 和 "," 都使用 split 方法。

    public Converter(String str) {
       String getRidOfAPrefix = str.replaceAll("a| |\\]", "");
       String[] nums = getRidOfAPrefix.split("\\[|,");
       for (String s: nums) {
           // do your thing
       }
    }
    

    【讨论】:

      【解决方案3】:

      试试这样的:

      String str = "[a2, a3][a4, a6][a10, a22]";
      List<Integer> result = new ArrayList<>();
      str = str.replaceAll("\\]\\[", ", ").replaceAll("\\[", "").replaceAll("\\]", "").replaceAll("a", "");
      Arrays.asList(str.split(", ")).forEach(num -> result.add(Integer.parseInt(num)));
      System.out.println(result); //[2, 3, 4, 6, 10, 22]
      

      【讨论】:

      • replaceAll("\\[", "").replaceAll("\\]", "").replaceAll("a", "") 可以简化为replaceAll("[\\[\\]a]", "")
      猜你喜欢
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      • 2015-06-18
      • 1970-01-01
      • 2010-12-18
      相关资源
      最近更新 更多