我正在处理一个制表符分隔的字符串。我正在使用 split
函数完成此操作,并且它适用于大多数情况。缺少字段时会出现问题,因此我没有在该字段中获取 null,而是得到下一个值。我将解析后的值存储在字符串数组中。
String[] columnDetail = new String[11];
columnDetail = column.split("\t");
任何帮助将不胜感激。如果可能的话,我想将解析后的字符串存储到一个字符串数组中,以便我可以轻松访问解析后的数据。
最佳答案
String.split使用 Regular Expressions ,你也不需要为你的拆分分配一个额外的数组。
split-method 会给你一个列表。,问题是你试图预先定义你有多少个标 checkout 现,但你怎么知道呢?尝试使用 Scanner 或 StringTokenizer 并了解拆分字符串的工作原理。
让我解释一下为什么\t 不起作用以及为什么需要 \\\\
逃离\\
.
好的,所以当你使用 Split 时,它实际上需要一个正则表达式(正则表达式),并且在正则表达式中你想定义要分割的字符,如果你写\t 这实际上并不意味着 \t
你想要分割的是\t
, 正确的?所以,只需写\t
你告诉你的正则表达式处理器“嘿,被转义的字符分割”不“嘿,被所有看起来像 \t
的字符分割”。注意到区别了吗?使用\意味着逃避某些东西。和\
在正则表达式中的意思与您的想法完全不同。
所以这就是你需要使用这个解决方案的原因:
\\t
告诉正则表达式处理器寻找\t。好吧,那你为什么需要两个呢?嗯,第一个\转义了第二个,这意味着它看起来像这样:\t 当你正在处理文本!
现在假设您要拆分\
那么你会留下\\但是你看,那行不通!因为\会尝试转义前一个字符!这就是为什么您希望输出为\\,因此您需要有\\\\。
我真的希望上面的示例可以帮助您理解为什么您的解决方案不起作用以及如何征服其他解决方案!
现在,我给了你这个 answer以前,也许你现在应该开始研究它们。
其他方法
StringTokenizer
您应该查看 StringTokenizer ,对于这类工作来说,它是一个非常方便的工具。
示例
StringTokenizer st = new StringTokenizer("this is a test");
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
这将输出
this
is
a
test
您使用 StringTokenizer 的 Second Constructor 来设置分隔符:
StringTokenizer(String str, String delim)
扫描仪
您也可以使用 Scanner正如其中一位评论员所说,这可能看起来有点像这样
示例
String input = "1 fish 2 fish red fish blue fish";
Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
System.out.println(s.nextInt());
System.out.println(s.nextInt());
System.out.println(s.next());
System.out.println(s.next());
s.close();
输出将是
1
2
red
blue
意思是它会把“fish”这个词删掉,把剩下的给你,用“fish”作为分隔符。
关于java - 使用 split 使用分隔符选项卡 "\t"在 Java 中解析字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1635764/