Java将文本文件解析为数组

Java将文本文件解析为数组,java,arrays,parsing,text,Java,Arrays,Parsing,Text,我的文本文件中有一个小数据库。看起来是这样的: abc def zed fgf qwe zxc ghj cvb ... for (String[] currLine : arrayList) { for (String currString : currLine) { System.out.print(currString + " "); } System.out.println(); } 我想将其转换为: Array1 =

我的文本文件中有一个小数据库。看起来是这样的:

abc   def   zed   fgf

qwe   zxc   ghj   cvb ...
for (String[] currLine : arrayList) {
    for (String currString : currLine) {
         System.out.print(currString + " ");
    }
    System.out.println();
}
我想将其转换为:

Array1 = [abc,   def,   zed,   fgf]

Array2 = [qwe,   zxc,   ghj,   cvb] ...
我会在上面搜索单词

FileReader input = new FileReader("myFile");
BufferedReader bufRead = new BufferedReader(input);
String myLine = null;

while ( (myLine = bufRead.readLine()) != null)
{    
    String[] array1 = myLine.split(":");
    // check to make sure you have valid data
    String[] array2 = array1[1].split(" ");
    for (int i = 0; i < array2.length; i++)
        function(array1[0], array2[i]);
}
FileReader输入=新的FileReader(“myFile”);
BufferedReader bufRead=新的BufferedReader(输入);
字符串myLine=null;
而((myLine=bufRead.readLine())!=null)
{    
字符串[]数组1=myLine.split(“:”);
//检查以确保您拥有有效的数据
字符串[]array2=array1[1]。拆分(“”);
for(int i=0;i

如何使用此示例代码执行此操作?

String[][]
将对您有所帮助。对于每一行,您将有一个数组,其中包含两个其他数组,其值由分隔符分割

String[][] array = new String[(int)bufRead.lines().count()][2];
for(int i = 0; (myLine = bufRead.readLine()) != null); ++i) {    
   array[i][0] = myLine.split(":");
   array[i][1] = array[i][0].split(" ");
   ...
}

要拥有一个数组,您可以使用如下类似的
ArrayList

    List<String[]> arrayList = new ArrayList<>();

    while ((myLine = bufRead.readLine()) != null) {
        String[] vals = myLine.split("   ");
        arrayList.add(vals);
    }
这将打印:

运行:
abc def zed fgf
qwe zxc ghj cvb
生成成功(总时间:0秒)

EDIT创建了一个方法,该方法将查找您要查找的值的索引。但是,我建议搜索类似于
“zxc”
的结果是1,1,而不是2,2,因为数组的索引是0

public static int[] getIndex(List<String[]> arrayList, String tofind) {
    int[] index = new int[]{-1, -1};
    for (int i = 0; i < arrayList.size(); i++) {
        String[] currLine = arrayList.get(i);
        for (int j = 0; j < currLine.length; j++) {
            if (currLine[j].equals(tofind)) {
                index = new int[]{i + 1, j + 1};
                return index;
            }
        }
    }
    return index;
}
将打印:

2,2

我在编写此打印方法时编写了此打印方法,您可以使用它方便调试:

public static void printList(List<String[]> arrayList) {
    for (String[] currLine : arrayList) {
        for (String currString : currLine) {
            System.out.print(currString + " ");
        }
        System.out.println();
    }
}
结果:

运行:
当前列表:
abc def zed fgf
qwe zxc ghj cvb

xzc指数为:2,2

索引2,2处的修改列表:
abc def zed fgf
qwe lmnop ghj cvb
生成成功(总时间:0秒)


您的代码有什么问题?文本文件不止两行。您的意思是将整行存储在数组的第一个索引中吗?或者你的意思是字符串[]数组1,其中元素0=abc,元素1=def,元素2=zed,等等?你为什么要
myLine.split(“:”)
这不意味着该文件看起来更像
abc:def-zed-fgf
@bubblebobble,我理解这一点。我在问数组的长度。我想你的意思是
Array1=[]{abc,def,zed,…}
而不是
Array1=[]{abc def zed…}
。这是完全不同的。在第一个示例中,您将创建一个每行值长度的数组。在第二个索引中,您正在创建一个长度为1的数组,第一个索引中的整行都是1。它是仅用于两行文本还是两行以上?这是用于文件的所有行如何找到[SIZE]?@bubblebobble,
SIZE==(int)bufRead.lines().count()
,Icorrected@bubblebobble,java 8的解决方案
谢谢
。我怎样才能搜索任何字符串并可以说它的索引?给我一个你正在搜索的东西的例子。
zxc
,我想知道它就像列表[x][y]。因此,当我打印索引时,我可以很容易地达到该值:/您希望搜索
zxc
be的结果是什么?包含
xzc
的数组索引?因此,在本例中,
qwe zxc ghj cvb
返回1(因为它是
ArrayList
中的第二个数组)?@bubblebobble,好的,让我想一个办法。
public static void printList(List<String[]> arrayList) {
    for (String[] currLine : arrayList) {
        for (String currString : currLine) {
            System.out.print(currString + " ");
        }
        System.out.println();
    }
}
public static void updateIndex(List<String[]> arrayList, int[] toUpdate, String value) {
    String[] rowToUpdate = arrayList.get(toUpdate[0] - 1);
    rowToUpdate[toUpdate[1] - 1] = value;
}
    System.out.println("Current list:");
    printList(arrayList);

    int[] zxcIndex = getIndex(arrayList, "zxc");
    System.out.println("\nIndex of xzc is: " + zxcIndex[0] + ", " + zxcIndex[1] + "\n");

    updateIndex(arrayList, zxcIndex, "lmnop");

    System.out.println("Modified list at index " + zxcIndex[0] + "," + zxcIndex[1] + " :");
    printList(arrayList);