我有行的txt文件: 第1行 - 20-01-01 Abs Def est(xabcd) 第2行 - 290-01-01 Abs Def est ghj gfhj(xabcd fgjh fgjh) 第3行 - 20-1-1 Absfghfgjhgj(xabcd ghj 5676gyj)
我想保留3个不同的String数组:
使用String []数组1 = myLine.split(“”)我只有20-01-01片段,但我也想保留其他2个字符串
编辑:我想这样做使用常规表达式(文本文件很大)这是我的一段代码: 请帮助,我搜索,但没有找到任何东西 THX。
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Comparator;
import java.util.Date;
import java.util.Set;
import java.util.TreeSet;
public class Holiday implements Comparable<Date>{
Date date;
String name;
public Holiday(Date date, String name){
this.date=date;
this.name=name;
}
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream(new File("c:/holidays.txt"));
InputStreamReader isr = new InputStreamReader(fis, "windows-1251");
BufferedReader br = new BufferedReader(isr);
TreeSet<Holiday> tr=new TreeSet<>();
System.out.println(br.readLine());
String myLine = null;
while ( (myLine = br.readLine()) != null)
{
String[] array1 = myLine.split(" "); //OR use this
//String array1 = myLine.split(" ")[0];//befor " " read 1-st string
//String array2 = myLine.split("")[1];
//Holiday h=new Holiday(array1, name)
//String array1 = myLine.split(" ");
// check to make sure you have valid data
// String[] array2 = array1[1].split(" ");
System.out.println(array1[0]);
}
}
@Override
public int compareTo(Date o) {
// TODO Auto-generated method stub
return 0;
}
}
答案 0 :(得分:2)
Pattern p = Pattern.compile("(.*?) (.*?) (\\(.*\\))");
Matcher m = p.matcher("20-01-01 Abs Def est (abcd)");
if (!m.matches()) throw new Exception("Invalid string");
String s1 = m.group(1); // 20-01-01
String s2 = m.group(2); // Abs Def est
String s3 = m.group(3); // (abcd)
答案 1 :(得分:0)
使用StringTokenizer,默认情况下使用“”作为分隔符。
答案 2 :(得分:0)
你似乎是基于空白分裂。字符串数组的每个元素都包含单独的空格分隔的子字符串,然后您可以通过字符串连接将它们拼凑回来。
例如,
array1[0]
将是20-01-01
array1[1]
将是Abs
array1[2]
将是Def
等等。
另一种选择是Java正则表达式,但是如果输入文本文件具有一致的格式并且需要处理很多行,那么这可能只有用。它非常强大,但需要一些经验。
答案 3 :(得分:0)
通过正则表达式匹配所需的文本数据。 下面的正则表达式确保中间正好有3个单词,括号中有1个单词。
String txt = "20-01-01 Abs Def est hhh (abcd)";
Pattern p = Pattern.compile("(\\d\\d-\\d\\d-\\d\\d) (\\w+ \\w+ \\w+) ([(](\\w)+[)])");
Matcher matcher = p.matcher(txt);
if (matcher.find()) {
String s1 = matcher.group(1);
String s2 = matcher.group(2);
String s3 = matcher.group(3);
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
}
但是,如果您需要更多灵活性,可能需要使用Lence Java提供的代码。