我试图用2个空行拆分段落。我尝试使用String.split()
,StringTokenizer
和StringUtils
类,但都没有。
这是我的代码:
DeviceNames (interfacename) # show commands
Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP
O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
* - candidate default
S* 0.0.0.0/0 [1/0] via 172.16.0.1, internal
S 10.100.8.0/21 [10/0] is directly connected, vlink10
C 0.0.2.0/24 is directly connected, internal
C 0.0.2.0/24 is directly connected, wan1
DeviceNames (interfacename) # show commands
Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP
O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
* - candidate default
S* 0.0.0.0/0 [10/0] is directly connected, vlink21
[10/0] is directly connected, vlink30
C 0.0.2.0/24 is directly connected, vlink30
C 0.0.2.0/32 is directly connected, vlink30
C 0.0.2.0/24 is directly connected, vlink21
C 0.0.2.0/32 is directly connected, vlink21
DeviceNames (interfacename) # show commands
Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP
O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
* - candidate default
S* 0.0.0.0/0 [10/0] is directly connected, vlink11
[10/0] is directly connected, vlink31
C 0.0.1.0/24 is directly connected, vlink31
C 0.0.1.0.1.1/32 is directly connected, vlink31
我希望将以上代码拆分为:
DeviceNames (interfacename) # show commands
Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP
O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
* - candidate default
S* 0.0.0.0/0 [1/0] via 172.16.0.1, internal
S 10.100.8.0/21 [10/0] is directly connected, vlink10
C 0.0.2.0/24 is directly connected, internal
C 0.0.2.0/24 is directly connected, wan1
下一个:
DeviceNames (interfacename) # show commands
Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP
O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
* - candidate default
S* 0.0.0.0/0 [10/0] is directly connected, vlink21
[10/0] is directly connected, vlink30
C 0.0.2.0/24 is directly connected, vlink30
C 0.0.2.0/32 is directly connected, vlink30
C 0.0.2.0/24 is directly connected, vlink21
C 0.0.2.0/32 is directly connected, vlink21
下一个:
DeviceNames (interfacename) # show commands
Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP
O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
* - candidate default
S* 0.0.0.0/0 [10/0] is directly connected, vlink11
[10/0] is directly connected, vlink31
C 0.0.1.0/24 is directly connected, vlink31
C 0.0.1.0.1.1/32 is directly connected, vlink31
答案 0 :(得分:0)
解决方案可以逐行读取文件,并将每一行存储到变量(或数组,或您需要的)中。 在阅读时,您可以通过这种方式检查该行是否为空行:
String newline = System.getProperty("line.separator"); // this is for getting proper new line;
boolean isNewline = myLine.startsWith(newline); //if your line start with newLine symbol
如果isNewLine
为真,那么您可以设置一个标志,如果下一行再次为空,那么您刚刚找到了您的段落。
答案 1 :(得分:0)
String#split()
应该有效。
例如:
String[] paragraphs = input.split("\\n\\n\\n");
注意:这仅适用于Unix换行符。
答案 2 :(得分:0)
这可以通过简单的正则表达式完成:
尝试:
let query = users.filter(id == 6523)
print(query)
变量 String[] paragraphs = text.split("(?im)(\r?\n){3,}");
包含您的数据。根据样本输入数据,上述语句将其分为3部分。此解决方案适用于在Windows或Linux上创建的文件,因此平台无关。
答案 3 :(得分:0)
您可以使用正则表达式在
之间用两个空行拆分代码 public static void main(String[] args)
{
String str=" DeviceNames (interfacename) # show commands\n"+
" Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP\n"+
" O - OSPF, IA - OSPF inter area\n"+
" N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2\n"+
" E1 - OSPF external type 1, E2 - OSPF external type 2\n"+
" i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area\n"+
" * - candidate default\n"+
"\n"+
" S* 0.0.0.0/0 [1/0] via 172.16.0.1, internal\n"+
" S 10.100.8.0/21 [10/0] is directly connected, vlink10\n"+
" C 0.0.2.0/24 is directly connected, internal\n"+
" C 0.0.2.0/24 is directly connected, wan1\n"+
"\n"+
"\n"+
" DeviceNames (interfacename) # show commands\n"+
" Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP\n"+
" O - OSPF, IA - OSPF inter area\n"+
" N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2\n"+
" E1 - OSPF external type 1, E2 - OSPF external type 2\n"+
" i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area\n"+
" * - candidate default\n"+
"\n"+
" S* 0.0.0.0/0 [10/0] is directly connected, vlink21\n"+
" [10/0] is directly connected, vlink30\n"+
" C 0.0.2.0/24 is directly connected, vlink30\n"+
" C 0.0.2.0/32 is directly connected, vlink30\n"+
" C 0.0.2.0/24 is directly connected, vlink21\n"+
" C 0.0.2.0/32 is directly connected, vlink21\n"+
"\n"+
"\n"+
" DeviceNames (interfacename) # show commands\n"+
" Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP\n"+
" O - OSPF, IA - OSPF inter area\n"+
" N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2\n"+
" E1 - OSPF external type 1, E2 - OSPF external type 2\n"+
" i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area\n"+
" * - candidate default\n"+
"\n"+
" S* 0.0.0.0/0 [10/0] is directly connected, vlink11\n"+
" [10/0] is directly connected, vlink31\n"+
" C 0.0.1.0/24 is directly connected, vlink31\n"+
" C 0.0.1.0.1.1/32 is directly connected, vlink31\n"+
"";
String[] array = str.split("(?<=\\S)\\n\\n\\n");
for (int i = 0; i < array.length; i++) {
System.out.println(String.format("================ %1$d ================\n%2$s", i + 1, array[i]));
}
}
输出:
================ 1 ================
DeviceNames (interfacename) # show commands
Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP
O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
* - candidate default
S* 0.0.0.0/0 [1/0] via 172.16.0.1, internal
S 10.100.8.0/21 [10/0] is directly connected, vlink10
C 0.0.2.0/24 is directly connected, internal
C 0.0.2.0/24 is directly connected, wan1
================ 2 ================
DeviceNames (interfacename) # show commands
Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP
O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
* - candidate default
S* 0.0.0.0/0 [10/0] is directly connected, vlink21
[10/0] is directly connected, vlink30
C 0.0.2.0/24 is directly connected, vlink30
C 0.0.2.0/32 is directly connected, vlink30
C 0.0.2.0/24 is directly connected, vlink21
C 0.0.2.0/32 is directly connected, vlink21
================ 3 ================
DeviceNames (interfacename) # show commands
Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP
O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
* - candidate default
S* 0.0.0.0/0 [10/0] is directly connected, vlink11
[10/0] is directly connected, vlink31
C 0.0.1.0/24 is directly connected, vlink31
C 0.0.1.0.1.1/32 is directly connected, vlink31