在多个白色 space 上拆分字符串而不是在单个 space 上拆分字符串?
Split string on multiple white space not on single space?
我正在从文本文件中读取文本并将其保存到数据库中。数据的排序就像一个假想的 table 列。我需要用多个白色分割每一行space,我试过这段代码
String[] arrayofStr = line.split("\s+");
它将字符串与每个白色分开space,还有一个问题要解决,我将把文本行粘贴到文本文件中。
P11570 24311VG10281-01 1 011441-X SPL-01 1.1 7430030711 FAB 2 0.4 M PIPE 5 938 2448 1465 2448 PIPE, SMLS, BE, 80, ASTM A106 GR.B,SOUR SERVICE LC1-N 2"-VG-10281-011441-X-N
P11570 24311VG10281-01 1 011441-X SPL-01 1.1 7430030711 FAB 2 0.4 M PIPE 2 938 2448 1465 2448 PIPE, SMLS, BE, 80, ASTM A106 GR.B,SOUR SERVICE LC1-N 2"-VG-10281-011441-X-N
P11570 24311VG10281-01 1 011441-X 1.1 8543603141 EREC 5/8 2 BOLTS PIPE, SMLS, BE, 80, ASTM A106 GR.B,SOUR SERVICE LC1-N 2"-VG-10281-011441-X-N
为了更清楚起见,我还将添加一个屏幕截图。
In the first line I need to read the text Pipe,Smls, be etc as single string and in the 5th and 6th line there appear blank spaces where as the previous line have data in that position, I need to insert null data for that position in the database.
这是我所说的一个例子。
- 您需要确保在保留列位置的同时将标签转换为 space。
- 因为制表符和 spaces 是混合的,最简单的解决方案是查看列开始并手动将它们输入到数组中。如果您制作如下所示的指南,这很容易做到。
- 然后只需读入行并使用列位置拆分它们。
- “数据”后跟列号,或者如果分组在同一列中,则为数字和字母。
String[] data = {
// 1111111111222222222233333333334444444444555555555566666666667777777777
// 01234567890123456789012345678901234567890123456789012345678901234567890123456789
"Data1 Data2 Data3 Data4 Data5a Data5b Data5c Data6 Data7 Data8",
"Data1 Data2 Data3 Data4 Data5a Data5b Data5c Data6 Data7 ",
"Data1 Data2 Data3 Data6 Data7 Data8",
"Data1 Data2 Data4 Data5a Data5b Data5c Data6 Data7 Data8",
};
// last entry is string length of the line
int[] columnStarts = { 0, 7, 18, 26, 34, 58, 64, 74, 79};
for (String line : data) {
int columnNumber = 0;
for (int i = 0; i < columnStarts.length - 1; i++) {
System.out.printf("%3d : %3d -- '%s'%n",
(columnNumber + 1),
columnStarts[columnNumber],
line.substring(columnStarts[i],
columnStarts[i + 1]).trim());
columnNumber++;
}
System.out.println();
}
版画
1 : 0 -- 'Data1'
2 : 7 -- 'Data2'
3 : 18 -- 'Data3'
4 : 26 -- 'Data4'
5 : 34 -- 'Data5a Data5b Data5c'
6 : 58 -- 'Data6'
7 : 64 -- 'Data7'
8 : 74 -- 'Data8'
1 : 0 -- 'Data1'
2 : 7 -- 'Data2'
3 : 18 -- 'Data3'
4 : 26 -- 'Data4'
5 : 34 -- 'Data5a Data5b Data5c'
6 : 58 -- 'Data6'
7 : 64 -- 'Data7'
8 : 74 -- ''
1 : 0 -- 'Data1'
2 : 7 -- 'Data2'
3 : 18 -- 'Data3'
4 : 26 -- ''
5 : 34 -- ''
6 : 58 -- 'Data6'
7 : 64 -- 'Data7'
8 : 74 -- 'Data8'
1 : 0 -- 'Data1'
2 : 7 -- 'Data2'
3 : 18 -- ''
4 : 26 -- 'Data4'
5 : 34 -- 'Data5a Data5b Data5c'
6 : 58 -- 'Data6'
7 : 64 -- 'Data7'
8 : 74 -- 'Data8'
请注意,数据被修剪和打印以仅显示列的数据部分。如果没有白色 space 修剪,数据将显示每一列的尾随白色 space。
以上内容应该足够你将信息存储在数组或列表中并根据列号进行修改。
我正在从文本文件中读取文本并将其保存到数据库中。数据的排序就像一个假想的 table 列。我需要用多个白色分割每一行space,我试过这段代码
String[] arrayofStr = line.split("\s+");
它将字符串与每个白色分开space,还有一个问题要解决,我将把文本行粘贴到文本文件中。
P11570 24311VG10281-01 1 011441-X SPL-01 1.1 7430030711 FAB 2 0.4 M PIPE 5 938 2448 1465 2448 PIPE, SMLS, BE, 80, ASTM A106 GR.B,SOUR SERVICE LC1-N 2"-VG-10281-011441-X-N
P11570 24311VG10281-01 1 011441-X SPL-01 1.1 7430030711 FAB 2 0.4 M PIPE 2 938 2448 1465 2448 PIPE, SMLS, BE, 80, ASTM A106 GR.B,SOUR SERVICE LC1-N 2"-VG-10281-011441-X-N
P11570 24311VG10281-01 1 011441-X 1.1 8543603141 EREC 5/8 2 BOLTS PIPE, SMLS, BE, 80, ASTM A106 GR.B,SOUR SERVICE LC1-N 2"-VG-10281-011441-X-N
为了更清楚起见,我还将添加一个屏幕截图。
In the first line I need to read the text Pipe,Smls, be etc as single string and in the 5th and 6th line there appear blank spaces where as the previous line have data in that position, I need to insert null data for that position in the database.
这是我所说的一个例子。
- 您需要确保在保留列位置的同时将标签转换为 space。
- 因为制表符和 spaces 是混合的,最简单的解决方案是查看列开始并手动将它们输入到数组中。如果您制作如下所示的指南,这很容易做到。
- 然后只需读入行并使用列位置拆分它们。
- “数据”后跟列号,或者如果分组在同一列中,则为数字和字母。
String[] data = {
// 1111111111222222222233333333334444444444555555555566666666667777777777
// 01234567890123456789012345678901234567890123456789012345678901234567890123456789
"Data1 Data2 Data3 Data4 Data5a Data5b Data5c Data6 Data7 Data8",
"Data1 Data2 Data3 Data4 Data5a Data5b Data5c Data6 Data7 ",
"Data1 Data2 Data3 Data6 Data7 Data8",
"Data1 Data2 Data4 Data5a Data5b Data5c Data6 Data7 Data8",
};
// last entry is string length of the line
int[] columnStarts = { 0, 7, 18, 26, 34, 58, 64, 74, 79};
for (String line : data) {
int columnNumber = 0;
for (int i = 0; i < columnStarts.length - 1; i++) {
System.out.printf("%3d : %3d -- '%s'%n",
(columnNumber + 1),
columnStarts[columnNumber],
line.substring(columnStarts[i],
columnStarts[i + 1]).trim());
columnNumber++;
}
System.out.println();
}
版画
1 : 0 -- 'Data1'
2 : 7 -- 'Data2'
3 : 18 -- 'Data3'
4 : 26 -- 'Data4'
5 : 34 -- 'Data5a Data5b Data5c'
6 : 58 -- 'Data6'
7 : 64 -- 'Data7'
8 : 74 -- 'Data8'
1 : 0 -- 'Data1'
2 : 7 -- 'Data2'
3 : 18 -- 'Data3'
4 : 26 -- 'Data4'
5 : 34 -- 'Data5a Data5b Data5c'
6 : 58 -- 'Data6'
7 : 64 -- 'Data7'
8 : 74 -- ''
1 : 0 -- 'Data1'
2 : 7 -- 'Data2'
3 : 18 -- 'Data3'
4 : 26 -- ''
5 : 34 -- ''
6 : 58 -- 'Data6'
7 : 64 -- 'Data7'
8 : 74 -- 'Data8'
1 : 0 -- 'Data1'
2 : 7 -- 'Data2'
3 : 18 -- ''
4 : 26 -- 'Data4'
5 : 34 -- 'Data5a Data5b Data5c'
6 : 58 -- 'Data6'
7 : 64 -- 'Data7'
8 : 74 -- 'Data8'
请注意,数据被修剪和打印以仅显示列的数据部分。如果没有白色 space 修剪,数据将显示每一列的尾随白色 space。
以上内容应该足够你将信息存储在数组或列表中并根据列号进行修改。