如何将字符串 = "\t" 转换为字符

4
我正在为一个Java桌面应用程序工作,该程序解析日志并上传到服务器。我们要求用户提供分隔符,以便我们解析CSV文件,并从文本字段中读取提供的分隔符字符串并将其转换为字符“-”。
因为我的解析器代码接受字符作为分隔符,所以代码需要将提供的分隔符转换为字符: separator = (sTerminatedBy != null && !sTerminatedBy.equalsIgnoreCase("")) ? sTerminatedBy.charAt(0) : ' '; 问题是当用户提供"\t"时,我该如何向我的解析器提供字符分隔符。用户可以请求使用任何分隔符,因此请问是否有什么方法可以通用化我的代码并能够提供字符分隔符。

我猜你的意思是想将长度为两个字符的字符串"\t"转换为字符'\t'? - Christoffer Hammarström
6个回答

4

你不能使用这个吗?

char tab = '\t';

如果这是用户输入,则实际字符串将为"\\t",因此您需要使用if语句。
if( sTerminatedBy.equals("\\t"))
    seperator = '\t';

1
if ("\\t".equals(sTerminatedBy)) {
  separator = '\t';
} else if (null == sTerminatedBy || "".equals(sTerminatedBy)) {
  separator = ' ';
} else {
  separator = sTerminatedBy.charAt(0);
}

最好能够自动处理任何反斜杠或其他有效的Java字符串,以便它可以处理“\t”,“\n”,“\u1234”等。 - Mark Bennett
啊,这里是各种转义序列的通用版本,https://dev59.com/63A65IYBdhLWcg3w-jum - Mark Bennett

0

这是一个真实的表达式:

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

0
这是一个晚些时候的答案/解决方法,适用于相同(或类似)的问题。我在Pig的Java UDF(用户定义函数)中遇到了类似的问题。该UDF有一个限制,只能接受字符串参数。但是我的解析器后来需要使用char来定义分隔符。我不想硬编码分隔符,所以我面临着将字符串控制字符转换为char的问题。因此,这是我的解决方法。我使用十进制表示法的控制字符作为参数。例如,对于TAB('\t'),我使用数字9。然后,我将我的字符串参数(“9”)转换为int,再将int转换为char。
int tab = Integer.parseInt(args[1]);
char ch = (char) tab;
System.out.println("[" + ch + "]"); 

"9"的输出结果:

[   ]

这不是最好的解决方案,但你不必在代码中编写所有可能的控制字符。但要注意调用者是否使用正确的十进制表示法来表示控制字符。


0

你也可以使用一个包含任何分隔符的字典:

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

等等。

最后检查分隔符中是否包含\\t,然后获取值。


-1

考虑:

String something ="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);
}

祝好!


你完全误解了问题。他希望用户提供分隔符,并且 "\\t" 应该被解释为 '\t' - Christoffer Hammarström
@Christoffer,如果你这么说的话...毕竟,你的答案被OP接受了。 不过,你的解决方案指向了一个个案(他需要处理\\n等)。我的解决方案将他引导到标准通用API,以正确的方式完成他想要的操作,就像@JustinKSU一样。 - Anthony Accioly
阅读他问题的第二部分,看看他在使用CSV解析器时想要实现什么:“用户可以请求通过任何分隔符进行解析,所以有人能提供一些通用代码并提供字符分隔符吗?”好吧,如果你认为我给出了错误的建议并且做出了危险的错误解释,那么没关系,我可以接受。 - Anthony Accioly
“User can request to parse by any separator” 的意思是“用户将输入一个分隔符字符串”。 “what can I do to generic my code and can provide separator in char” 的意思是“我该如何将这个字符串转换为单个字符?” 这个问题是关于如何解释用户输入的分隔符字符串,而你的回答并没有涉及到这一点。 - Christoffer Hammarström
你并没有指出如何实现他想要的东西,而是回答了完全不相关的内容。这使得它不是一个答案,而是完全离题。你甚至在硬编码分隔符,而问题是如何从用户那里获取分隔符。除了他已经工作的内容之外,他还有一个要求:允许用户输入“\t”表示制表符,而我的答案满足了这个要求,而你的答案则完全脱离了主题。即使你想象其他可能的分隔符要求,你的答案也没有履行那些要求。 - Christoffer Hammarström
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接