【问题标题】:Fetching Long Value From String [closed]从字符串中获取长值
【发布时间】:2013-05-02 07:44:26
【问题描述】:

感谢您宝贵的时间。我需要分解我的字符串并只获取 Kr 之前的数字。 (在 Java 中)

例如String str = "Delhi 205 Kr."

从上面我只需要 205 作为子字符串。

另一个问题是,假设我在该字符串中得到另一个数字,那么我只需要空格 Kr 之前的数字。

例如String str = "India112Delhi 98 Kr."

这里我也需要 98 而不是 112 或两者的组合。

如果我有这样的字符串,那么如何只检索值 25?

String str = "New Delhi113 25 Kr."

请帮帮我 提前致谢。

【问题讨论】:

  • 你能回答一下吗。。没时间深入研究。
  • 如果没有时间,至少看看String类中的split()方法。它很容易理解,并且可能会在这里为您完成工作。
  • Extract Integer Part in String 的可能重复项

标签: java android regex string replace


【解决方案1】:

将此正则表达式用作模式:

(\d+) (K|k)(R|r)\.

并从您的Matcher 中获取第一组的值。

Pattern pattern = Pattern.compile("(\d+) (K|k)(R|r)\.");
Matcher matcher = pattern.matcher("India112Delhi 98 Kr.");

if (matcher.find()) {
    System.out.println(matcher.group(1));
}

【讨论】:

    【解决方案2】:

    只需使用 split 函数拆分字符串,这将为您提供字符串数组。循环它并尝试解析数组中的每个字符串。将解析代码放入 try{}catch{} 中,如果解析成功,您将获得您的号码。 else 继续循环。

    String str = "Delhi 205 Kr.";
    

    String[] 值 = str.split(" ");

    长值=0;

     for(int i=0; i<values.length; i++)
        {
                try {
                    value = Long.parseLong(values[i]);
        break;
                }
            catch(Exception e)
            {}
        }
    }
    System.out.println(value);
    

    【讨论】:

    • 只捕获被空格包围的第一个数字。如果 kr 之前的数字是字符串中的第二个数字怎么办?
    • @Hardik4560 请参阅已编辑的问题。现在做什么
    • 我的相同答案将起作用,因为 113 之间没有任何空格。此代码适用于所有被空格包围的数字。
    【解决方案3】:

    使用您给定的示例代码(请注意,这仅在您需要从第二名获取单元时才有效)

    String str = "Delhi 205 Kr.";
    String[] values = str.split(" ");
    Long value = Long.parseLong(values[1]);
    

    更新

    String str = "Delhi 205 Kr.";
    String[] values = str.split(" ");
    
    Long value=0;
    for(int i=1; i<values.length; i++)
    {
        if(values[i].equalsIgnoreCase("kr."))
        {
            try {
                value = Long.parseLong(values[i-1]);
            }
            catch(Exception e)
            {
                System.out.println("Not a number before Kr");
            }
        }
    }
    System.out.println(value);
    

    注意第二个代码将获取“Kr”之前的值。

    【讨论】:

    • 正如我在回答中所说的,你可以忽略 if 检查
    • 无论如何if 检查不会增加时间复杂度,确切地说是大哦。此外,当它可以轻松检查时,为什么还要抛出异常
    • 如果字符串是“112 华盛顿特区”,这将不起作用,永远不会检索到数字 112。请检查我的回答,并发表您的意见
    • @VarunVishnoi 更新了我的答案,因为它有 Kr。 [我错过了期间]
    • @Hardik4560 如果您看到 OP 问题,他明确指出 我只需要空格 Kr 前的数字。
    【解决方案4】:

    一些使用Guava的代码,我选择的Java框架:)

    String str = "..."; // input string
    
    int indexOf = str.indexOf("Kr"); // get the index of Kr
    String previous = str.substring(0, indexOf); // only get string before kr
    
    // Split string on all non-digits and throw away any empty splits. 
    // This leaves you with only numbers
    Iterable<String> numbers = Splitters.onPattern("\\D").omitEmptyStrings();
    // Get the last of the numbers since this one is next to the Kr.
    Long output = Long.parseLong(Iterables.getLast(numbers));
    

    【讨论】:

      【解决方案5】:

      谢谢大家,但真正正确的答案就在这里。我们需要从后面循环

                          String cost= "Nay String   205 Kr.";
                          String[] values = cost.split(" ");
                          Long value=(long) 0;
                          for(int i=values.length; i>0; i--)
                          {
                                  try {
                                      value = Long.parseLong(values[i]);
                          break;
                                  }
                              catch(Exception e)
                              {}
                          }
      

      【讨论】:

        【解决方案6】:

        这对你有用吗?
        String str = "India112Delhi 98 Kr.";

        String [] strarray = str.split(" ");

        System.out.println(Long.parseLong(strarray[strarray.length-2]));

        【讨论】:

          【解决方案7】:

          此解决方案仅适用于您的输入字符串始终采用相同格式的情况。

          你可以根据空格分割字符串。

          相当于:

          string.split(' ')

          对于输入字符串 India112Delhi 98 Kr.,您将获得一个如下所示的数组:

          [India112Delhi, 98, Kr.]

          您的倒数第二个元素始终是您需要的数字!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-05-05
            • 2013-06-27
            • 1970-01-01
            相关资源
            最近更新 更多