【问题标题】:problems with splitting line using tab delimiter使用制表符分隔线的问题
【发布时间】:2015-04-05 07:57:06
【问题描述】:

我正在从以下格式的文件中读取输入:

a b c d e 

每个字母代表一个字符串,并由tab 字符分隔。我正在使用 bufferedreader 读取该行并使用以下方法将其拆分:

String[] splitString= currentLine.split("\t");

其中currentLine 是一个字符串,其中包含由缓冲读取器读取的行。

但是,输入中可能存在b 可能为空白或e 可能为空白的某些情况(请参阅上面的示例输入)。

我希望能够对每个实例执行不同的操作,如下所示:

if (b is blank){
do this
}else if (e is blank) {
do this
}else{
do this
}

但是我想不出一个合适的 if 条件来准确地实现这个功能

欢迎提出建议

编辑:

这是输入的正常形式,前提是没有“空白”

a[tab]b[tab]c[tab]d[tab]e

假设应该在b 的位置现在是空白的,输入将如下所示:

a[tab][tab]c[tab]d[tab]e

【问题讨论】:

  • b 可以为空是什么意思?您是否将输入读取为abcde(无空格),然后当b 为空白时您正在读取acde,或者您是否使用空格读取它,然后当您读取a c d e 时b 为空白?您的问题中的“空白”是什么意思?
  • 如果你有x y z,你怎么知道be是空白的,或者ad是空白等等?有很多可能性
  • 我已经编辑了 OP 以更好地解释 @OriLentz
  • @fge 你是什么意思?我的编辑是否回答了您的问题?
  • 好的,我现在明白了。我已经在下面回答了。我希望这会有所帮助。

标签: java bufferedreader


【解决方案1】:

根据标签拆分(使用\\t - 表示只拆分标签)。空字符串表示您连续有两个选项卡。

string.split("\\t");

例子:

String str = "hello[tab]hi[tab]how are you?"
String[] arr = str.split("\\t");

将产生一个大小为 3 的数组,其中包含以下元素:hello, hi, how are you?

但是,对于 String str = "hello[tab][tab]hi[tab][tab][tab]how are you?",结果将是一个大小为 6 的数组,其中包含元素 hello, , hi, , , how are you?"

只需检查您在哪里有“空字符串”,它们就会告诉您在哪里缺少什么。

【讨论】:

  • 您确定结果数组的大小为 6?因为我很确定我尝试过类似的方法,但最终没有成功
  • 没关系,我只是检查了一下,一切都很好,但是,要检查空字符串,您只需要检查空字符吗?
  • 只检查 null 或更首选的 .isEmpty()
【解决方案2】:

你可以试试:

String[] splitString = currentLine.split("\\s");

正则表达式\\s 匹配单个空白字符。

空格字符由[ \t\n\x0B\f\r]组成。

【讨论】:

  • 哦,好的,我明白这一点,但我希望能够区分这两种情况。如果b 为空白,那么我想做一些事情,当e 为空白时类似
  • splitString数组中空格对应的元素会存储什么?
  • 如果我的输入是a c d e,那么根据上面的代码,splitString 数组会包含什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-10
  • 1970-01-01
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 2021-03-31
  • 2011-04-15
相关资源
最近更新 更多