我知道这个问题的变体以前经常被问过,但这 并不是 这些问题的 精确 重复。
我想检查a String
是否为数字,如果是,我想将其存储为double
。有几种方法可以做到这一点,但是所有这些方法似乎都不适合我的目的。
一种解决方案是使用Double.parseDouble(s)
或类似方法new BigDecimal(s)
。但是,如果存在逗号,这些解决方案将不起作用(因此,“
1,234”将导致异常)。在使用这些技术之前,我当然可以删除所有逗号,但是这似乎在其他地区带来了很多问题。
我看了Apache Commons NumberUtils.isNumber(s)
,但是却遇到了同样的逗号问题。
我考虑过NumberFormat
或DecimalFormat
,但这些似乎太宽容了。例如,“ 1A”被格式化为“
1”,而不是表示它不是数字。此外,类似“ 127.0.0.1”的内容将被计为数字127,而不是表示它不是数字。
我觉得我的要求不是那么陌生,以至于我是第一个这样做的人,但是没有一个解决方案能够完全满足我的需求。我想我什至不知道我 到底
需要什么(否则我可以编写自己的解析器),但是我知道上述解决方案由于所指出的原因而无法使用。是否存在任何解决方案,或者我需要准确确定我需要什么并为此编写自己的代码?
听起来很怪异,但我会尝试遵循并使用java.util.Scanner
。
Scanner scanner = new Scanner(input);
if (scanner.hasNextInt())
System.out.println(scanner.nextInt());
else if (scanner.hasNextDouble())
System.out.println(scanner.nextDouble());
else
System.out.println("Not a number");
对于输入,如1A
,127.0.0.1
,1,234
,6.02e-23
我得到下面的输出:
Not a number
Not a number
1234
6.02E-23
Scanner.useLocale
可用于更改为所需的语言环境。
问题内容: 我正在尝试确定字符串数组中的特定项目是否为整数。 我是形式上的中缀表达式,然后尝试将结果数组拆分为两个数组;一个用于整数,一个用于运算符,同时丢弃括号和其他杂项。做到这一点的最佳方法是什么? 我以为我也许可以找到一种方法或某种方法,但是没有运气。 问题答案: 最幼稚的方式是遍历String并确保所有元素对于给定的基数都是有效数字。由于你必须至少查看一次每个元素,因此这将尽可能地提高效率
本文向大家介绍Java判断字符串为空、字符串是否为数字,包括了Java判断字符串为空、字符串是否为数字的使用技巧和注意事项,需要的朋友参考一下 关于 String 的判空: 注:“==”比较两个变量本身的值,即两个对象在内存中的首地址。而“equals()”比较字符串中所包含的内容是否相同。第二种写法中,一旦 selection 真的为 null,则在执行 equals 方法的时候会直接报空指针异
问题内容: 在Java中,有没有一种方法可以确定字符串的第一个字符是否为数字? 一种方法是 并一直执行到9点,但这似乎效率很低。 问题答案: 请注意,这将允许使用 任何 Unicode数字 ,而不仅仅是0-9。您可能更喜欢: 或较慢的正则表达式解决方案: 但是,使用这些方法中的任何一种,必须首先确保该字符串不为空。如果是,而且将引发。没有这个问题。 要使整个条件只占一行,并避免长度检查,可以将正则
问题内容: 我编写了两个简单的函数来确定字符串是否是回文。我以为它们是等效的,但是2不起作用。为什么是这样? 1个 2 问题答案: 不会创建字符串,而是创建“反向”对象: 因此,字符串不等于object 。为了使它起作用,您需要确保实际评估了该对象: 所述插入件在每个字符串中的字符,并且这导致反转串之间正在变成一个字符串对象。
问题内容: 我想将字符串转换为最严格的数据类型:int或float。 我有两个字符串: 如何在Python中确定value1应该为Float,value2应该为Integer? 问题答案:
问题内容: 我需要一个可以告诉我字符串是否包含非字母数字字符的方法。 例如,如果字符串为“ abcdef?” 或“abcdefà”,该方法必须返回true。 问题答案: 使用Apache Commons Lang: 另一种方法是遍历String的字符并检查: 您还剩下一个问题:示例字符串“abcdefà”是字母数字,因为是字母。但我认为您希望将其视为非字母数字,对吗? 因此,您可能想使用正则表达式