我有一個將 sql 查詢作為字串讀取的方法,需要將所有 '\' 替換為 '\\'。這樣做是為了防止 \n 和 \r 在輸出中被處理為換行符。
private static String cleanTokenForCsv(String inputToken) {
if (inputToken == null) {
return "";
}
if (inputToken.length() == 0 || inputToken.contains(",") || inputToken.contains("\"")
|| inputToken.contains("\n") || inputToken.contains("\r")) {
String replacedToken = inputToken.replace(",", ";");
return String.format("\"%s\"", replacedToken.replace("\"", "\"\""));
} else {
return inputToken;
}
}
樣本輸入
(\nSELECT\n a.population_id\n ,a.empi_id\n\r ,a.encounter_id\n ,SPLIT_PART(MIN(a.service_date||'|'||a.norm_numeric_value),'|',2) ::FLOAT as early_temperature\nFROM\n ph_f_result a)
查詢的預期輸出將類似于
"(\nSELECT\n a.population_id\n ;a.empi_id\n\r ;a.encounter_id\n ;SPLIT_PART(MIN(a.service_date||'|'||a.norm_numeric_value);'|';2)::FLOAT as earliest_temperature\nFROM\n ph_f_result a)"
整個查詢在一行中,換行符完好無損
但是,輸出改為
"(
SELECT
a.population_id
;a.empi_id
;a.encounter_id
;SPLIT_PART(MIN(a.service_date||'|'||a.norm_numeric_value);'|';2)::FLOAT as earliest_temperature
FROM
ph_f_result a)"
我還嘗試了以下方法:
replacedToken = replacedToken.replace("\\", "\\\\");
使用正則運算式
replacedToken = replacedToken.replaceAll("\\\\", "\\\\\\\\");
編輯:所以如果我為 \n 和 \r 添加單獨的替換呼叫,我可以讓它作業,如下所示
replacedToken = replacedToken.replace("\n","\\n");
replacedToken = replacedToken.replace("\r", "\\r");
但我正在為所有 '\n' 實體尋找更通用的東西
uj5u.com熱心網友回復:
您有回車符和換行符,而不是轉義的 r 或 n。
replacedToken = replacedToken.replace("\n", "\\n").replace("\r", "\\r");
這會將所有回車符和換行符替換為其轉義的等價物。
uj5u.com熱心網友回復:
我假設您的目標只是轉換 characters \r,\t并\n在輸入中轉換String為雙引號的兩個字串"\\r"等等,以便列印字串不會導致換行符或制表符。
請注意,該字符 \n根本不包含該字符 \。我們只是同意寫信\n來代表它。這應該有效:
public static String escapeWhitespaceEscapes(String input) {
return input
.replace("\n", "\\n")
.replace("\r", "\\r")
.replace("\t", "\\t");
}
但請注意,您必須執行反向操作才能取回原始字串。
uj5u.com熱心網友回復:
嘗試使用
System.out.println(data.replace("\n","\n"));
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/448792.html
上一篇:在Java中替換部分字串的問題
