我在文件中有内容,我正在尝试剖析所述内容的某些部分。
文件内部: FNAME:John:LNAME:Doe:年龄:40:DOB:1975年7月31日
这一切都在一行
现在,我只想得到输出:
目前的输出是:
我尝试过使用:
System.out.println(line.substring(line.indexOf(":") + 1, line.lastIndexOf(":")));
但这只会削减" FNAME:"没有别的。
我希望对此进行详细解释,如果不是,我会道歉。谢谢你的帮助。
代码:
Scanner cfg_reader = new Scanner(cfg_file);
cfg_reader.useDelimiter("~");
while (cfg_reader.hasNext()) {
String line = cfg_reader.next();
System.out.println(line.substring(line.indexOf(":") + 1, line.lastIndexOf(":")));
//System.out.println(cfg_reader.next());
}
请注意,这是我目前的代码,我在代码选择之上提供的内容与此不同。
答案 0 :(得分:3)
您可以使用正则表达式使用方法'split'拆分字符串,这将创建一个在该字符串上拆分的字符串数组。
因此,从您的示例line.split(":")
将生成一个数组:
{"FNAME", "John", "LNAME", "Doe", "AGE", "40", "DOB", "July 31, 1975"}
然后,您可以迭代它并构建您想要的输出
例如:
import org.junit.Test;
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsEqual.equalTo;
import static org.junit.Assert.assertThat;
public class FooTest {
@Test
public void foo() {
String line = "FNAME:John:LNAME:Doe:AGE:40:DOB:July 31, 1975";
final String[] split = line.split(":");
StringBuilder builder = new StringBuilder();
for (int i = 0; i < split.length; i++) {
if (i % 2 != 0) {
builder.append(split[i]);
if (i != split.length -1) {
builder.append(" ");
}
}
}
assertThat(builder.toString(), is(equalTo("John Doe 40 July 31, 1975")));
}
}
毫无疑问,这是一种更好的方式,但葡萄酒......