Java删除双破折号但不删除单破折号

时间:2011-05-04 23:13:28

标签: java parsing

我正在解析数字数据,有时我得到负数,当没有任何可用数据时,我得到--

我创建了一个类来清理数字并通过命令传递它们:

output = output.replaceAll("\\-", " ");

我认为它工作得很好,因为双击不见了,但现在我意识到我的所有负数看起来都是积极的。我不确定如何处理它,有没有办法明确说明两个破折号是否相互存在以取代它?或者只有当它后跟一个数字时才有接受破折号的方法吗?

请帮忙。

谢谢!

4 个答案:

答案 0 :(得分:3)

您可以直接替换“ - ”,这样负数就不会受到影响吗?

output = output.replaceAll("\\-\\-", " ");

或只是

output = output.replace("--", " ");

答案 1 :(得分:1)

用双破折号替换正则表达式:

output = output.replaceAll("\\-\\-", " ");

答案 2 :(得分:1)

Scanner可能是解析输入的更简单方法。 Scanner接受各种不同的序列(String,File,PrintStream(如System.in)和我认为的其他类型),并且可以帮助您轻松地解析所提供的序列。

在您的情况下,扫描仪可让您使用nextInt()方法轻松获取数值:

String fileName = "sample.txt";
Scanner scanner = new Scanner(new File(fileName));

while (scanner.hasNext()) {
    if (scanner.hasNextInt())
        System.out.println(scanner.nextInt());
    else
        System.out.println(scanner.next());
}

你可以使用它,然后构造只是字符串的数据,并将它们与实际数字的值分开。从长远来看,这可能会更容易使用。

我发布这个的原因是要指出可能有其他方法来解析数据。这可能不是你现在所需要的,但它可能会在将来派上用场。当/如果您重新考虑重构此代码时,它可能是一个可行的选择。祝你好运!

答案 3 :(得分:0)

尝试 output = output.replaceAll("--", " "); 要么 output=output.replaceAll("-{2}");

任何一种都可以使用,正如REPL的clojure代码所证明的那样。 (它使用java字符串处理)。

  

用户=> (re-seq#“ - ”negdata)(“ - ”)   用户=> (re-seq#“ - {2}”negdata)(“ - ”)   用户=> (println negdata)    - 2.0 nil user => (println posdata)   -1.0无