【问题标题】:How to convert string = "\t" to char如何将字符串 = "\t" 转换为字符
【发布时间】:2011-08-19 11:47:54
【问题描述】:

我正在为一个解析日志并上传到服务器的 java 桌面应用程序工作。我们要求用户提供用于解析 CSV 文件的分隔符,我们从字符串中的文本字段中读取提供的分隔符并通过 -

创建一个字符

separator = (sTerminatedBy != null && !sTerminatedBy.equalsIgnoreCase("")) ? sTerminatedBy.charAt(0) : ' ';

因为我的解析器代码接受 char 中的分隔符。

问题是当用户提供“\t”时,我如何在 char 中向我的解析器提供分隔符。用户可以请求通过任何分隔符进行解析,因此任何主体都可以建议我可以做什么来通用我的代码并可以在 char 中提供分隔符。

【问题讨论】:

  • 我假设您的意思是将两个字符长的字符串"\\t" 转换为字符'\t'

标签: java string parsing csv char


【解决方案1】:

您还可以使用包含您想要的任何分隔符的字典:

delimiters = {
    "\\t" : '\t',
    "\\r" : '\r'
}

等等

最后检查 \\t 是否在分隔符中然后获取值

【讨论】:

    【解决方案2】:

    这是针对相同(或类似问题)的较晚答案/解决方法。 在 Pig 的 java UDF(用户定义函数)的情况下,我遇到了类似的问题。 UDF 有一个限制,只能接受字符串参数。除了我的解析器以后需要 char 来定义分隔符。我不想硬编码分隔符,所以我遇到了字符串控制字符到字符的转换问题。所以这是我的工作。 我作为参数使用了控制字符的十进制表示。所以例如对于 TAB ('\t'),我使用了数字 9。然后我将字符串 arg ("9") 转换为 ro int,并将 int 转换为 char。

    int tab = Integer.parseInt(args[1]);
    char ch = (char) tab;
    System.out.println("[" + ch + "]"); 
    

    “9”的输出:

    [   ]
    

    不是最好的解决方案,但您不必将所有可能的控制字符编码到您的代码中。但必须知道调用者使用 ctrl char 的正确十进制表示。

    【讨论】:

      【解决方案3】:

      考虑:

      串一些东西 ="this\tis\ttab\tseparated";

      推荐的方法:

      // Can be also used with files and streams
      Scanner sc = new Scanner(something);
      sc.useDelimiter("\t");
      
      while (sc.hasNext()) {
         System.out.println(sc.next());
      }
      sc.close();
      

      对于小的输入:

      String[] separated = something.split("\t");
      for (String string : separated) {
         System.out.println(string);
      }
      

      干杯,

      【讨论】:

      • -1:你完全误解了这个问题。他希望用户提供分隔符,"\\t" 应该被解释为'\t'
      • @Christoffer,如果你这么说......你的回答毕竟被 OP 接受了。尽管如此,您的解决方案仍将@Ashish 指向一个案例(他将需要处理\\n 等)。我的解决方案向他指出了标准的通用 APIS,它以正确的方式做他想做的事,就像 @JustinKSU 一样。
      • 操作员询问如何将"\\t" 转换为'\t',您告诉他如何拆分字符串。完全不合逻辑。
      • 阅读他的问题的第二部分,看看他试图用他的 CSV 解析器完成什么:“用户可以请求通过任何分隔符进行解析,所以任何人都可以建议我可以做些什么来通用我的代码并且可以在字符中提供分隔符。”。好吧,争论是没有用的,如果你认为我给出了错误的建议并做出了危险的错误解释,那么好吧,我可以忍受。
      • “用户可以请求使用任何分隔符解析”表示“用户将输入分隔符作为字符串”。 “我可以做些什么来通用我的代码并可以在 char 中提供分隔符”意味着“我如何将此字符串转换为单个字符?”。问题是关于如何解释用户输入的分隔符字符串,而您的回答没有解决任何问题。
      【解决方案4】:

      你不能用这个吗?

      char tab = '\t';
      

      如果是用户输入,那么实际的字符串是“\\t”,所以你必须求助于if

      if( sTerminatedBy.equals("\\t"))
          seperator = '\t';
      

      【讨论】:

        【解决方案5】:
        if ("\\t".equals(sTerminatedBy)) {
          separator = '\t';
        } else if (null == sTerminatedBy || "".equals(sTerminatedBy)) {
          separator = ' ';
        } else {
          separator = sTerminatedBy.charAt(0);
        }
        

        【讨论】:

        • 对于任何反斜杠或其他有效的 Java 字符串,最好自动执行此操作,以便它可以处理 "\\t"、"\\n"、"\\u1234"、等
        • 啊,这里是各种转义序列的通用版本,stackoverflow.com/questions/3537706/…
        【解决方案6】:

        这是一个真实的表达:

        "\t".charAt(0) == '\t'
        

        【讨论】:

          猜你喜欢
          • 2020-10-15
          • 2014-03-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-04-16
          • 1970-01-01
          相关资源
          最近更新 更多