以下是我所做的:
while (sc.hasNext()) {
String sLine = sc.nextLine();
sLine.replaceAll("\\s", "");
String[] scanned = sLine.split("");
我的意见如下:
IF (2 -2 +) (3 2 *) (-1 4 +) (5 3 *)
这意味着什么无关紧要,但扫描仪所做的是首先将其存储在字符串“按原样”中。然后,我使用 replaceAll 函数删除所有空格。然后我剩下:
IF(2-2+)(32*)(-14+)(53*)
然后,我使用java解释这段代码,如果没有错误发生,就执行计算。我现在的问题是,当我把字符串分割成记号时,它将使每个“减号”成为它自己的记号,但我想以某种方式把它和它后面的整数联系起来,这样记号仍然只是一个整数(现在是负的),没有带减号的记号。有没有简单的方法来做这件事?
你对这项工作使用了错误的工具。您需要一个扫描仪和一个单独的解析器。一元负号由解析器处理,而不是由扫描器处理。看看递归下降表达式解析器、Dijkstra调车场算法等。
你用""把字符串分开了。我相信你想做的是,使用正则表达式,按照你想要的方式拆分字符串。如果你对Java regex不熟悉,请看看这个来熟悉一下。我建议看一下特殊构造(非捕获)部分。
提示
String[] scanned = sLine.split("your regex");
您可以使用< code > negative look-back 来拆分前面没有< code >连字符的< code >空字符串:-
str.split("(?<!-)");
这不会在-
和2
之间的空字符串上拆分,从而保持它们不变。
String str = "IF(2-2+)(32*)(-14+)(53*)";
String[] arr = str.split("(?<!-)");
System.out.println(Arrays.toString(arr));
输出:-
[, I, F, (, 2, -2, +, ), (, 3, 2, *, ), (, -1, 4, +, ), (, 5, 3, *, )]
现在您有-2
和-1
而不是-
作为单独的元素。
生成字符串:
主要的问题是第五次会议的形式是什么
问题内容: 是否可以每个字符分割一个字符串? 例如,假设我有一个包含以下内容的字符串: 我怎样才能使它看起来像这样: 问题答案: 192 为了完整起见,你可以使用正则表达式执行此操作: 对于字符的奇数,你可以执行以下操作: 你还可以执行以下操作,以简化较长块的正则表达式: re.finditer如果字符串很长,则可以使用它逐块生成。
问题内容: 我是Java的新手,为了实践起见,我试图创建一个十六进制到十进制的数字转换器,因为我已经成功地制作了一个二进制到十进制的转换器。 我遇到的问题基本上是将一个字符串中的给定字符与另一个字符串进行比较。这就是我定义要比较的当前字符的方式: 这是我尝试比较角色的方法: 当我尝试通过仅输入数字(例如12)来运行代码时,它可以工作,但是当我尝试使用“ b”时,会出现一个奇怪的错误。这是运行程序的
问题内容: 我有一个字符串: 我想要一个简单的方法将其转换为实际的。 我能从中挖掘出的所有其他问题都与将int字符串转换为数组有关。 我试着做 但是我明白了 手动清理边缘并去除斜线似乎是我做错了什么。 我很好奇是否有一种简单的方法可以将字符串数组作为字符串转换为字符串数组。 即转换为 解决方案 (感谢@Eric D) 问题答案: 将您的“字符串数组”编码为数据,然后将此数据作为JSON解码为Swi