Когда я выполняю эту программу, она работает абсолютно нормально
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexMatches {
public static void main( String args[] ) {
// String to be scanned to find the pattern.
String line = "0X10001,0X10002,0X610001,0X610002";
String pattern = "0X(?=\\d{6})|(0)X(?=\\d{5})";
// Create a Pattern object
Pattern r = Pattern.compile(pattern);
// Now create matcher object.
Matcher m = r.matcher(line);
StringBuffer builder = new StringBuffer();
while (m.find()) {
m.appendReplacement(builder,
"$1");
}
m.appendTail(builder);
// Print the replaced matcher
System.out.println("After Replacement: "
+ builder.toString());
}
}
Но когда я встраиваю тот же кусок кода в код ниже, он выдает ошибку.(Этот код записывает rawData в CSV-файл, но перед записью выполняет шестнадцатеричную очистку.)
public static String writeToCSV(StringBuilder rawData, String granularity, String threadName, long collectionTime)
throws IOException {
StringBuilder fileName = new StringBuilder();
fileName.append(String.valueOf(System.currentTimeMillis())).append("_").append(threadName).append(".csv");
StringBuilder directoryPath = new StringBuilder();
directoryPath.append(TEMP_DATA_DIR_PATH).append(granularity).append(File.separator).append(collectionTime);
AmpStatsDataUtil.createWritableDirectory(directoryPath.toString());
StringBuilder filePath = new StringBuilder();
filePath.append(directoryPath.toString()).append(File.separator).append(fileName.toString());
BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(filePath.toString(), true), "UTF-8"));
// Hexadecimal clean up
Pattern r = Pattern.compile("0x(?=\\d{6})|(0)x(?=\\d{5})");
Matcher m = r.matcher(rawData);
StringBuffer builder = new StringBuffer();
while (m.find()) {
m.appendReplacement(builder,"$1");
}
m.appendTail(builder);
LOGGER.info("Cleaned hexadecimal digits are {0}",builder.toString());
try {
bw.write(builder.toString());
} catch (IOException e) {
LOGGER.error("Error while writing data to CSV file:{0}", e);
} finally {
try {
if (bw != null) {
bw.flush();
}
bw.close();
} catch (IOException e) {
LOGGER.error("Error while closing bufferedwriter:{0}", e);
}
}
return fileName.toString();
}
Но без использования компоновщика строк он работает нормально:
//code 3
public static String writeToCSV(StringBuilder rawData, String granularity, String threadName, long collectionTime)
throws IOException {
StringBuilder fileName = new StringBuilder();
fileName.append(String.valueOf(System.currentTimeMillis())).append("_").append(threadName).append(".csv");
StringBuilder directoryPath = new StringBuilder();
directoryPath.append(TEMP_DATA_DIR_PATH).append(granularity).append(File.separator).append(collectionTime);
AmpStatsDataUtil.createWritableDirectory(directoryPath.toString());
StringBuilder filePath = new StringBuilder();
filePath.append(directoryPath.toString()).append(File.separator).append(fileName.toString());
BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(filePath.toString(), true), "UTF-8"));
// Hexadecimal clean up
Pattern myPattern = Pattern.compile("0x");
Matcher myMatcher = myPattern.matcher(rawData);
try {
bw.write(myMatcher.repalaceAll("0");
} catch (IOException e) {
LOGGER.error("Error while writing data to CSV file:{0}", e);
} finally {
try {
if (bw != null) {
bw.flush();
}
bw.close();
} catch (IOException e) {
LOGGER.error("Error while closing bufferedwriter:{0}", e);
}
}
return fileName.toString();
}
Можете ли вы пожалуйстаскажите, почему второй кусок кода не компилируется?