2011-04-01 190 views
1

爲什麼這段代碼會拋出異常?ReplaceAll java拋出異常

file = file.replaceAll(Pattern.quote("/"),File.separator); 
Message: String index out of range: 1 
File: null Class: java.lang.String Methode: charAt Line: -1 
File: null Class: java.util.regex.Matcher Methode: appendReplacement Line: -1 
File: null Class: java.util.regex.Matcher Methode: replaceAll Line: -1 
File: null Class: java.lang.String Methode: replaceAll Line: -1
+0

什麼是文件的價值? – reef 2011-04-01 15:46:01

+0

這看起來不像標準的Java堆棧跟蹤。你在哪個平臺上? – 2011-04-01 15:46:06

回答

8

replaceAll第二個參數是在一定程度上的圖案。特別是反斜槓有特殊的含義。但是,您不僅僅希望使用Pattern.quote,因爲它會引用比您需要的更多的信息。你想用Matcher.quoteReplacement

file = file.replaceAll(Pattern.quote("/"), 
         Matcher.quoteReplacement(File.separator)); 

或者 - 和而更簡單 - 不要使用在所有的正則表達式:

file = file.replace("/", File.separator); 
+1

你不想要Matcher.quoteReplacement()嗎? http://download.oracle.com/javase/1.5.0/docs/api/java/util/regex/Matcher.html#quoteReplacement%28java.lang.String%29 – 2011-04-01 15:46:53

+0

@Jason:是的,我確實:) – 2011-04-01 15:48:06

+0

閱讀API有幫助,我雖然替換隻取代了第一個發現...這使事情變得更容易:-) – 2011-04-01 15:51:27