填充动态二维 java 数组
populate dynamic 2D java array
我想读入一个文件,将每一行的内容写入一个维度为[三]的数组[不确定,但很长]
到目前为止,我有以下代码,它能够使用模式匹配器梳理出我正在寻找的输入文件的组件,但是,它卡在了输入的第一行,只是一遍又一遍地添加,如何使输入文件前进并每次向数组写入一个新行。
到目前为止,我的代码如下所示:
public static void main(String[] args) throws IOException
{
BufferedReader br_0 = new BufferedReader(new FileReader("file.txt"));
String line_0;
//while the file is still reading
while ((line_0 = br_0.readLine()) != null)
{
int i = 0;
Pattern p = Pattern.compile("'(.*?)'(?![a-zA-Z])");
//count from zero
String[][] arr = new String[262978][3];
for (int count = 0; count < 262978; count++)
{
Matcher m = p.matcher(line_0);
int j = 0;
while (m.find())
{
arr[i][j++] = m.group(1);
}
i++;
}
}
br_0.close();
}
输入文件如下所示:
'end with'('the playing of the british national anthem', 'hong kong').
'follow at'('the stroke of midnight', 'this').
'take part in'('the ceremony', 'both countries').
'start at about'('# pm', 'the ceremony').
'end about'('# am', 'the ceremony').
'lower'('the british hong kong flag', '# royal hong kong police officers').
'raise'('the sar flag', 'another #').
'leave for'('the royal yacht britannia', 'the #').
'hold by'('the chinese and british governments', 'the handover of hong kong').
'rise over'('this land', 'the regional flag of the hong kong special administrative region of the people \'s republic of china').
'cast eye on'('hong kong', 'the world').
'hold on'('schedule', 'the # governments').
'be festival for'('the chinese nation', 'this').
'go in'('the annals of history', 'july # , #').
...
理想情况下,数组索引如下所示:
[0][0]end with
[0][1]the playing of the british national anthem
[0][2]hong kong
[1][0]follow at
[1][1]the stroke of midnight
[1][2]this
[2][0]take part in
[3][1]the ceremony
[2][2]both countries
重要的是数组长度既能容纳很长的文件,也能容纳短文件。
此时的输出如下所示:
[45993][2] the president of the people \'s republic of china he mr jiang zemin
[45994][0] speak at
[45994][1] the ceremony
[45994][2] the president of the people \'s republic of china he mr jiang zemin
[45995][0] speak at
[45995][1] the ceremony
[45995][2] the president of the people \'s republic of china he mr jiang zemin
[45996][0] speak at
[45996][1] the ceremony
[45996][2] the president of the people \'s republic of china he mr jiang zemin
[45997][0] speak at
[45997][1] the ceremony
[45997][2] the president of the people \'s republic of china he mr jiang zemin
[45998][0] speak at
[45998][1] the ceremony
[45998][2] the president of the people \'s republic of china he mr jiang zemin
[45999][0] speak at
这处理了第一行 262978 次。
for (int count = 0; count < 262978; count++)
更好的是:
int count = 0;
String[][] arr = new String[262978][3];
Pattern p = Pattern.compile("'(.*?)'(?![a-zA-Z])");
//while the file is still reading
while ((line_0 = br_0.readLine()) != null) {
Matcher m = p.matcher(line_0);
int j = 0;
while (m.find()) {
arr[count][j++] = m.group(1);
}
count++;
}
br_0.close();
但是,不应使用幻数 262978,也不应使用数组。显然也是最大的假设。每行三个字符串不正确。
将其替换为
List<List<String>> arr = new ArrayList<>();
Pattern p = Pattern.compile("'(.*?)'(?![a-zA-Z])");
//while the file is still reading
while ((line_0 = br_0.readLine()) != null) {
List<String> three = new ArrayList<>();
Matcher m = p.matcher(line_0);
int j = 0;
while (m.find()) {
three.add( m.group(1) );
}
arr.add( three );
}
br_0.close();
要打印,
for( List<String> three: arr ){
for( String s: three ){
System.out.print( s + " " );
}
System.out.println();
}
您正在从此处的文件读取数据:while ((line_0 = br_0.readLine()) != null)
,但是,您正在使用此处 相同 行进行 262978 次迭代:for (int count = 0; count < 262978; count++)
。
你可以做的是用这样的东西替换它:
int i = 0;
Pattern p = Pattern.compile("'(.*?)'(?![a-zA-Z])");
//count from zero
String[][] arr = new String[262978][3];
while (((line_0 = br_0.readLine()) != null) && (i < 262978))
{
Matcher m = p.matcher(line_0);
int j = 0;
while (m.find())
{
arr[i][j++] = m.group(1);
}
i++;
}
我想读入一个文件,将每一行的内容写入一个维度为[三]的数组[不确定,但很长]
到目前为止,我有以下代码,它能够使用模式匹配器梳理出我正在寻找的输入文件的组件,但是,它卡在了输入的第一行,只是一遍又一遍地添加,如何使输入文件前进并每次向数组写入一个新行。
到目前为止,我的代码如下所示:
public static void main(String[] args) throws IOException
{
BufferedReader br_0 = new BufferedReader(new FileReader("file.txt"));
String line_0;
//while the file is still reading
while ((line_0 = br_0.readLine()) != null)
{
int i = 0;
Pattern p = Pattern.compile("'(.*?)'(?![a-zA-Z])");
//count from zero
String[][] arr = new String[262978][3];
for (int count = 0; count < 262978; count++)
{
Matcher m = p.matcher(line_0);
int j = 0;
while (m.find())
{
arr[i][j++] = m.group(1);
}
i++;
}
}
br_0.close();
}
输入文件如下所示:
'end with'('the playing of the british national anthem', 'hong kong').
'follow at'('the stroke of midnight', 'this').
'take part in'('the ceremony', 'both countries').
'start at about'('# pm', 'the ceremony').
'end about'('# am', 'the ceremony').
'lower'('the british hong kong flag', '# royal hong kong police officers').
'raise'('the sar flag', 'another #').
'leave for'('the royal yacht britannia', 'the #').
'hold by'('the chinese and british governments', 'the handover of hong kong').
'rise over'('this land', 'the regional flag of the hong kong special administrative region of the people \'s republic of china').
'cast eye on'('hong kong', 'the world').
'hold on'('schedule', 'the # governments').
'be festival for'('the chinese nation', 'this').
'go in'('the annals of history', 'july # , #').
...
理想情况下,数组索引如下所示:
[0][0]end with
[0][1]the playing of the british national anthem
[0][2]hong kong
[1][0]follow at
[1][1]the stroke of midnight
[1][2]this
[2][0]take part in
[3][1]the ceremony
[2][2]both countries
重要的是数组长度既能容纳很长的文件,也能容纳短文件。
此时的输出如下所示:
[45993][2] the president of the people \'s republic of china he mr jiang zemin
[45994][0] speak at
[45994][1] the ceremony
[45994][2] the president of the people \'s republic of china he mr jiang zemin
[45995][0] speak at
[45995][1] the ceremony
[45995][2] the president of the people \'s republic of china he mr jiang zemin
[45996][0] speak at
[45996][1] the ceremony
[45996][2] the president of the people \'s republic of china he mr jiang zemin
[45997][0] speak at
[45997][1] the ceremony
[45997][2] the president of the people \'s republic of china he mr jiang zemin
[45998][0] speak at
[45998][1] the ceremony
[45998][2] the president of the people \'s republic of china he mr jiang zemin
[45999][0] speak at
这处理了第一行 262978 次。
for (int count = 0; count < 262978; count++)
更好的是:
int count = 0;
String[][] arr = new String[262978][3];
Pattern p = Pattern.compile("'(.*?)'(?![a-zA-Z])");
//while the file is still reading
while ((line_0 = br_0.readLine()) != null) {
Matcher m = p.matcher(line_0);
int j = 0;
while (m.find()) {
arr[count][j++] = m.group(1);
}
count++;
}
br_0.close();
但是,不应使用幻数 262978,也不应使用数组。显然也是最大的假设。每行三个字符串不正确。
将其替换为
List<List<String>> arr = new ArrayList<>();
Pattern p = Pattern.compile("'(.*?)'(?![a-zA-Z])");
//while the file is still reading
while ((line_0 = br_0.readLine()) != null) {
List<String> three = new ArrayList<>();
Matcher m = p.matcher(line_0);
int j = 0;
while (m.find()) {
three.add( m.group(1) );
}
arr.add( three );
}
br_0.close();
要打印,
for( List<String> three: arr ){
for( String s: three ){
System.out.print( s + " " );
}
System.out.println();
}
您正在从此处的文件读取数据:while ((line_0 = br_0.readLine()) != null)
,但是,您正在使用此处 相同 行进行 262978 次迭代:for (int count = 0; count < 262978; count++)
。
你可以做的是用这样的东西替换它:
int i = 0;
Pattern p = Pattern.compile("'(.*?)'(?![a-zA-Z])");
//count from zero
String[][] arr = new String[262978][3];
while (((line_0 = br_0.readLine()) != null) && (i < 262978))
{
Matcher m = p.matcher(line_0);
int j = 0;
while (m.find())
{
arr[i][j++] = m.group(1);
}
i++;
}