当前位置: 首页 > 知识库问答 >
问题:

在Java中替换部分字符串的问题

贺聪
2023-03-14

我有一个将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\na.population_id\n,a.empi_id\n\r,a.encounter_id\n,SPLIT_PART(MIN(a.service_date||'|'|| a.norm_numeric_value),'|',2)::FLOAT为earliest_temperature\n来自\nph_f_result)

查询的预期输出将大致如下

"(\nSELECT\na.population_id\n;a.empi_id\n\r;a.encounter_id\n;SPLIT_PART(MIN(a.service_date||'|'|| a.norm_numeric_value);'|'; 2)::FLOAT为earliest_temperature\n来自\nph_f_result)"

将整个查询放在一行中,该行保持完整

然而,输出结果是

"(
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'实例

共有3个答案

拓拔弘厚
2023-03-14

尝试使用
系统。出来println(data.replace(“\n”和“\n”);

屠锐
2023-03-14

我假设您的目标只是将输入字符串中的字符\r\t\n转换为双引号的两个字符串“\\r”等等,这样打印字符串就不会产生换行符或制表符。

请注意,字符\n实际上根本不包含字符\。我们只是同意写\n来表示它。这应该是有效的:

   public static String escapeWhitespaceEscapes(String input) {
       return input
           .replace("\n", "\\n")
           .replace("\r", "\\r")
           .replace("\t", "\\t");
   }

但是请注意,您必须执行反向操作才能返回原始字符串。

屈宏爽
2023-03-14

您有回车符和换行符,而不是转义的r或n。

replacedToken = replacedToken.replace("\n", "\\n").replace("\r", "\\r");

这将用转义的等效字符替换所有回车符和换行符。

 类似资料:
  • 问题内容: 我使用正则表达式从网页中获取字符串,并且该字符串的一部分可能包含我想替换为其他内容的内容。这怎么可能呢?我的代码是这样的,例如: 问题答案:

  • 问题内容: 我想,以取代过去的字符串,它是一个,与) 假设字符串是: -Insert into dual (name,date, 转换为: -Insert into dual (name,date) 问题答案: 以下代码应将的最后一次出现替换为。 注意 如果不含,则会抛出Exception 。

  • 问题内容: 我正在尝试获取字符串的前10个字符,并想用替换空格。 我有 但是我不确定下一步该怎么做。 我想要绳子 这是对字符串的测试。 成为 this_is_th 问题答案: 只需使用str_replace: 您可以在上一个和呼叫之后执行此操作,如下所示: 但是,如果您想花哨的话,可以一行完成:

  • 问题内容: 我目前有一个包含字符A,B和C的字符串,例如,该字符串看起来像 其他不包含A,B或CI的随机变量想分别用“ A”,“ B”和“ C”替换A,B和C,这是我目前正在做的最好方法: 问题答案: 如果A,B和C是完全相同的单个字符,cletus的答案就可以正常工作,但是如果它们可以是更长的字符串,而您只是出于示例目的将它们称为A,B和C,则cletus的答案就可以。如果它们是更长的字符串,则

  • 本文向大家介绍替换Java字符串中的子字符串,包括了替换Java字符串中的子字符串的使用技巧和注意事项,需要的朋友参考一下 假设以下是我们的字符串。 我们想将子字符串“ Dead”替换为“ Alive”。为此,让我们使用以下逻辑。在这里,我们使用了while循环,并在其中找到了要替换的子字符串的索引。这样,我们一个接一个地替换了整个子字符串。 以下是替换子字符串的完整示例。 示例 输出结果