2011-05-04 105 views
0

我解析數值數據,有時我得到負數,當沒有可供使用的我得到--Java的去除雙破折號而不是單一的破折號

我創建了一個類來清潔號碼,並通過他們通過一個命令:

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

我認爲它工作正常,因爲雙破折號消失了,但現在我意識到我所有的負數似乎是積極的。我不知道如何處理它,有沒有一種方法可以專門說出兩個破折號是否存在於對方之後才能取代它?或者有沒有辦法只在其後跟一個數字才接受短劃線?

請大家幫忙。

謝謝!

+0

Personnaly我只會用標準的JAVA API和相關模式解析數字,並將解析錯誤解釋爲沒有數據。 – 2011-05-04 23:34:28

回答

3

您能否替換「 - 」,讓負數不會受到影響?

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

或只是

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

更換正則表達式以雙劃線:

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

嘗試 output = output.replaceAll("--", " ");output=output.replaceAll("-{2}");

要麼將​​工作,就證明了日來自REPL的clojure代碼。 (它使用java字符串處理)。

用戶=>(再SEQ# 「 - 」 negdata)( 「 - 」) 用戶=>(重新SEQ# 「 - {2}」 negdata)( 「 - 」) 用戶=>(的println negdata) --2.0零用戶=>(的println POSDATA) -1.0零

1

Scanner可以是解析輸入更簡單的方法。掃描儀接受各種不同的序列(字符串,文件,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()); 
} 

您可以使用此,然後構建只是字符串的數據,並將它們從什麼樣的價值觀是實際分離數字。從長遠來看,這可能更容易使用。

我發佈這個帖子的理由是指出可能有其他解析數據的方法。這可能不是你現在所需要的,但它可以在未來派上用場。如果您重新考慮重構此代碼,這可能是一個可行的選項。祝你好運!