当前位置: 首页 > 知识库问答 >
问题:

检查字符串是否包含Java:Locale中的分数部分

夏祯
2023-03-14
11
11.00
15,25 (for Locale like Denmark where the decimal part is denoted by a comma instead of dot)

我只想做一件事,当它是双倍的;即它包含一个分数值。分数值“00”也是有效的情况。

if(string contains fraction){
  // do something
}

给出了以上三个示例,对于11.0015、25的控件应该在if内部,而对于11则不在。

我怎么查这个?

我有现场信息。这样我就知道字符串是否属于哪个区域设置了。既然如此,我怎么才能找到String是否有分数呢?

共有1个答案

傅阿苏
2023-03-14

编辑:由于您已经编辑了说明您知道区域设置的问题,您可以将其与numberformat.getNumberInstance(Locale).parse(strValue)结合使用,并使用逗号和千分隔符的正则表达式。这里有一个测试代码:

import java.text.DecimalFormatSymbols;
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;

class Main{
  private static final Locale DUTCH = new Locale("nl","NL");

  public static void main(String[] a){
    test("11", Locale.ENGLISH);
    test("11", DUTCH);
    System.out.println();
    test("11.00", Locale.ENGLISH);
    test("11.00", DUTCH);
    System.out.println();
    test("11,00", Locale.ENGLISH);
    test("11,00", DUTCH);
    System.out.println();
    test("15.123", Locale.ENGLISH);
    test("15.123", DUTCH);
    System.out.println();
    test("15,123", Locale.ENGLISH);
    test("15,123", DUTCH);
    System.out.println();
    test("something", Locale.ENGLISH);
    test("something", DUTCH);
  }

  static void test(String val, Locale locale){
    try{
      DecimalFormatSymbols symbols = new DecimalFormatSymbols(locale);
      char decimalSep = symbols.getDecimalSeparator();
      char thousandSep = symbols.getGroupingSeparator();

      String escapedDecimalSep = decimalSep == '.' ? "\\." : decimalSep+"";
      String escapedThousandSep = thousandSep == '.' ? "\\." : thousandSep+"";

      String intRegex = "\\d+(" + escapedThousandSep + "\\d{3})*"; // Example ENGLISH: "\\d+(,\\d{3})*"
      String doubleRegex = intRegex + escapedDecimalSep + "\\d+"; // Example ENGLISH: "\\d+(,\\d{3})*\\.\\d+"

      NumberFormat format = NumberFormat.getInstance(locale);
      Number number = format.parse(val);
      if(val.matches(doubleRegex)){
        double d = number.doubleValue();
        System.out.println(val + " (in locale " + locale + ") is a double: " + d);
      } else if(val.matches(intRegex)){
        int i = number.intValue();
        System.out.println(val + " (in locale " + locale + ") is an integer: " + i);
      } else{
        System.out.println("Unable to determine whether value " + val + " is an integer or double for locale " + locale);
      }
    } catch(ParseException ex){
      System.out.println("Error occurred for value \"" + val + "\". Are you sure it's an integer or decimal?");
    }
  }
}

上网试试。

以下是输出:

11 (in locale en) is an integer: 11
11 (in locale nl_NL) is an integer: 11

11.00 (in locale en) is a double: 11.0
Unable to determine whether value 11.00 is an integer or double for locale nl_NL

Unable to determine whether value 11,00 is an integer or double for locale en
11,00 (in locale nl_NL) is a double: 11.0

15.123 (in locale en) is a double: 15.123
15.123 (in locale nl_NL) is an integer: 15123

15,123 (in locale en) is an integer: 15123
15,123 (in locale nl_NL) is a double: 15.123

Error occurred for value "something". Are you sure it's an integer or decimal?
Error occurred for value "something". Are you sure it's an integer or decimal?
 类似资料:
  • 问题内容: 说我有一个ArrayList: 我希望在我说arrayList.containsSubString(’string1’);时返回arrayList的第一个元素。除了遍历元素的每个元素并检查该元素字符串的子字符串之外,该如何做? 问题答案: 我能想到的唯一方法是执行以下操作: 虽然不知道这是否被认为是好的做法。

  • 问题内容: 我有一个包含多个字符串的数组。我已经使用(请参阅下文)检查数组中是否存在某个字符串,但是我想检查字符串中是否有一部分字符串? 上面的代码只是检查数组中是否整体存在一个值,但是我想找到 问题答案: 这样尝试。 将包含具有匹配子字符串的字符串列表。 在Swift中,struct提供了filter方法,该方法将基于过滤文本条件来过滤提供的数组。

  • 问题内容: 我发现的大多数问题都偏向于他们正在寻找数字中的字母这一事实,而我正在寻找我想成为无数字符串的数字。我需要输入一个字符串,并检查它是否包含任何数字以及是否确实拒绝它。 仅当所有字符均为数字时,该函数才返回。我只想看看用户是否输入了一个数字,例如“我拥有一只狗”之类的句子。 有任何想法吗? 问题答案: 你可以像这样使用函数和函数 另外,你可以使用正则表达式,如下所示

  • 问题内容: 我正在编写一个程序,其中用户以以下格式输入字符串: 我需要检查字符串中是否有数字 然后只提取数字。 如果我使用或,则无论输入的内容是什么,程序都无法在字符串中找到数字,但是仅在只有数字的情况下才能使用。 我可以使用什么作为查找和提取的解决方案? 问题答案: 我使用的解决方案如下所示: 我确信这不是一个完美的解决方案,但它满足了我的需求。谢谢大家的帮助。:)

  • 问题内容: 我想检查a是否仅包含数字。我用这个: 但意识到它也允许和。基本上,我要确保只能包含数字,而不能包含其他字符。由于和都是数字,所以不是正确的方法。也许我需要一个正则表达式?有小费吗? 问题答案: 怎么样

  • 我正在寻找一个运算符,它允许我检查字段的值是否包含某个字符串。 比如: 可能吗?