Tag: 解析

如何强制ANTLR解析所有输入CharStream

我正在使用ANTLR4来解析语法文件。 当我使用BaseErrorListener来检测错误时,我遇到了问题。 当遇到非法输入字符串时,ANTLR会自动匹配相应的分支,然后忽略后续的字符流 ,即使它包含错误。 我想检测那个错误。 这是我的g4文件和java文件。 TransitionLexer是我的lexer文件, TransitionCondition是我的解析器文件。 ErrorDialogListener.java是我的errorListener和Test.java id主java文件。 TransitionLexer.g4 lexer grammar TransitionLexer; BOOLEAN: ‘true’ | ‘false’; IF: ‘if’; THEN: ‘then’; ELSE: ‘else’; NAME: (ALPHA | CHINESE | ‘_’)(ALPHA | CHINESE | ‘_’|DIGIT)*; ALPHA: [a-zA-Z]; CHINESE: [\u4e00-\u9fa5]; NUMBER: INT | REAL; INT: DIGIT+ |'(-‘DIGIT+’)’; REAL: DIGIT+ (‘.’ DIGIT+)? | ‘(-‘ DIGIT+ (‘.’ DIGIT+)? ‘)’; […]

java.text.Parseexception:Unparseable Date

我有以下代码: String ModifiedDate = “1993-06-08T18:27:02.000Z” ; SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd’T’HH:mm:ss.SSSZ”); Date ModDate = sdf.parse(ModifiedDate); 即使我的日期格式很好,我也得到以下exception… java.text.ParseException: Unparseable date: “1993-06-08T18:27:02.000Z” at java.text.DateFormat.parse(DateFormat.java:337)

Java 1.5:数学公式解析器

你好我经常开发JTableModels,其中一些单元格必须包含一个简单的数学公式的结果。 这个公式可以有: 运算符(+, – ,*,/) 数字常数 其他单元格引用(包含数字) 参数(引用名称为“INTEREST_RATE”的数字) 我经常解决它制作一个小的计算器类,它解析公式,我定义的语法。 计算器类使用堆栈进行计算,语法总是使用波兰表示法。 但波兰语对我和我的用户来说都不自然。 所以我的问题是…… 是否有一个运行在1.5 jvm的lib并且可以处理我的requeriments并使用常规符号(带括号,我不知道这种符号样式的名称)的公式? PD它假设公式总是语法正确,我可以预处理不是常量的数字来提供它们的值

了解Scanner中的useDelimiter:为什么我得到空白令牌?

我正在使用具有分隔符的扫描仪,我遇到了一个我想要了解的奇怪行为。 我正在使用这个程序: Scanner sc = new Scanner(“Aller à : Navigation, rechercher”); sc.useDelimiter(“\\s+|\\s*\\p{Punct}+\\s*”); String word=””; while(sc.hasNext()){ word = sc.next(); System.out.println(word); } 输出是: Aller à Navigation rechercher 首先,我不明白为什么我得到一个空白令牌, 文档说: 根据分隔模式的类型,可以返回空标记。 例如,模式“\ s +”将不返回空标记,因为它匹配分隔符的多个实例。 分隔模式“\ s”可以返回空标记,因为它一次只传递一个空格。 我正在使用\\s+所以为什么它返回一个空白令牌? 那么关于正则表达式还有另一件我想要理解的事情。 如果我使用“反向”正则表达式更改分隔符: sc.useDelimiter(“\\s*\\p{Punct}+\\s*|\\s+”); 输出是正确的,我得到: Aller à Navigation rechercher 为什么它的方式有效? 编辑: 在这种情况下: Scanner sc = new Scanner(“(23 ou 24 minutes pour les […]

解析xml文件时出现未知主机exception

当我试图解析一个xml时,我得到以下exception: – java.net.UnknownHostException: hibernate.sourceforge.net at java.net.AbstractPlainSocketImpl.connect(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at sun.net.NetworkClient.doConnect(Unknown Source) at sun.net.www.http.HttpClient.openServer(Unknown Source) at sun.net.www.http.HttpClient.openServer(Unknown Source) at sun.net.www.http.HttpClient.(Unknown Source) at sun.net.www.http.HttpClient.New(Unknown Source) at sun.net.www.http.HttpClient.New(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source) at org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown Source) at org.apache.xerces.impl.XMLEntityManager.startDTDEntity(Unknown Source) […]

java中的html截断器

是否有任何实用程序(或示例源代码)在Java中截断HTML(用于预览)? 我想在服务器上而不是在客户端上进行截断。 我正在使用HTMLUnit来解析HTML。 更新: 我希望能够预览HTML,因此截断器将保持HTML结构,同时在所需的输出长度之后剥离元素。

输入字符串“1”的java.lang.NumberFormatException

所以,我有一个真正困扰我的问题。 我有一个简单的解析器,我在java中。 这是相关代码: while( (line = br.readLine())!=null) { String splitted[] = line.split(SPLITTER); int docNum = Integer.parseInt(splitted[0].trim()); //do something } 输入文件是CSV文件,文件的第一个条目是整数。 当我开始解析时,我立即获得此exception: Exception in thread “main” java.lang.NumberFormatException: For input string: “1” at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:580) at java.lang.Integer.parseInt(Integer.java:615) at dipl.parser.TableParser.parse(TableParser.java:50) at dipl.parser.DocumentParser.main(DocumentParser.java:87) 我检查了文件,确实有1作为它的第一个值(该字段中没有其他字符),但我仍然收到消息。 我认为可能是因为文件编码:它是UTF-8,带有Unix端线。 该程序在Ubuntu 14.04上运行。 欢迎任何建议在哪里寻找问题。

Java SAX解析器进度监控

我正在用Java编写一个SAX解析器来解析维基百科文章的2.5GB XML文件。 有没有办法监视Java中的解析进度?

“D”和“F”的数字格式exception的例外情况?

我的代码中遇到了一个非常奇怪的问题。 我有一个简单的温度转换器,用户输入摄氏温度,按“转换”后,显示华氏温度。 如果用户未输入有效的内容(任何不是数字或小数的内容),则会显示错误对话框。 码: btnConvert.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { String tempFahr = (String) enterDegreesC.getText(); double tempF = Double.valueOf(tempFahr); double tempFConverted = tempF * 1.8 +32; displayDegreesF.setText(tempFConverted + ” Farenheit”); } catch (NumberFormatException nfe) { JOptionPane.showMessageDialog(frmTemperatureConverter, “Please Enter a Number.”, “Conversion Error”, JOptionPane.ERROR_MESSAGE); } } }); 相当直接和简单的代码,除了一件事,效果很好。 当我输入数字后跟字母“f”或“d”的组合时,不显示错误对话框,并使用字母前面的数字计算华氏温度。 这只发生在“d”和“f”(以及“D”和“F”)而不是任何其他字母。 我很难过这个。 为什么只有这两个字母放在一个数字后会导致exception不被抛出并继续计算?

解析具有整数值的字符串到目前为止

我有一个带有此值的字符串,例如:“20130211154717”我希望它像“2013-02-11 15:47:17”。 我怎样才能做到这一点?