我DecimalFormat
用来解析/验证用户输入。不幸的是,它在解析时允许字符作为后缀。
示例代码:
try {
final NumberFormat numberFormat = new DecimalFormat();
System.out.println(numberFormat.parse("12abc"));
System.out.println(numberFormat.parse("abc12"));
} catch (final ParseException e) {
System.out.println("parse exception");
}
结果:
12
parse exception
我实际上希望他们两个都有解析异常。我怎样才能告诉我DecimalFormat
不允许输入"12abc"
?
从以下文档中NumberFormat.parse
:
从给定字符串的开头解析文本以产生数字。 该方法可能不会使用给定字符串的整个文本。
这是一个示例,可以使您了解如何确保考虑整个字符串。
import java.text.*;
public class Test {
public static void main(String[] args) {
System.out.println(parseCompleteString("12"));
System.out.println(parseCompleteString("12abc"));
System.out.println(parseCompleteString("abc12"));
}
public static Number parseCompleteString(String input) {
ParsePosition pp = new ParsePosition(0);
NumberFormat numberFormat = new DecimalFormat();
Number result = numberFormat.parse(input, pp);
return pp.getIndex() == input.length() ? result : null;
}
}
输出:
12
null
null
问题内容: 为什么Python 3允许“ 00”作为原义的0,却不允许“ 01”作为原义的1?有充分的理由吗?这种矛盾使我感到困惑。(我们正在谈论的是Python 3,它故意打破了向后兼容性以实现诸如一致性之类的目标。) 例如: 问题答案: 根据https://docs.python.org/3/reference/lexical_analysis.html#integer- literals :
问题内容: 在精确地探究Java标识符中允许使用哪些字符时,我偶然发现了一件非常奇怪的事情,以至于几乎可以肯定这是一个错误。 我预料地发现,Java标识符合他们开始与拥有的Unicode字符属性的要求,并其次是与物业,以授予领先的下划线和美元符号例外。事实并非如此,我发现与我所听说的那种普通标识符或其他任何想法都存在极大差异。 简短演示 请考虑以下演示,证明Java标识符中允许使用ASCII ES
问题内容: 这是我的代码,但是我没有得到方法如何接受类型作为返回值。如何运作?谁能解释一下这种方法的工作原理? 提前致谢 :) 问题答案: 好的,所以首先要做的是: 这是一个不断扩大的原始类型转换,因此这是合法的。您可以: 但是您不能: 第二:它返回的根本不是ASCII码。Java执行Unicode。 碰巧的是,当创建Java时,Unicode仅定义了适合16位的代码点。因此,它被创建为2字节的无
我们知道< code>let是在JavaScript中定义变量的保留关键字。 那么为什么这不是错误呢?
问题内容: 我刚接触PHP,但是多年来我一直在使用类似的语言进行编程。我被以下内容弄糊涂了: 它产生了语法错误:这就是调用。 但这很好用: 碰了一会儿之后,我被告知您不能在默认属性中调用函数。你必须在做。我的问题是:为什么?这是“功能”还是草率的实现?有什么根据? 问题答案: 编译器代码建议这是设计使然,尽管我不知道其背后的官方原因是什么。我也不确定要可靠地实现此功能需要花费多少精力,但是目前完成
问题内容: 我一直想知道为什么我们不能在python中的函数名和变量名之间使用连字符 尝试过使用Lisp和Clojure之类的功能编程语言,允许使用连字符。为什么python不这样做。 我确信,由于某些原因,圭多爵士一定会这样做。我用谷歌搜索,但找不到答案。谁能给我一点启示吗? 问题答案: 因为连字符用作减法运算符。想象一下,您 可以 拥有一个函数,然后拥有如下代码: 是对函数的调用,还是从名为的