java String split对首尾分隔符的忽略处理
时间: 2024-03-06 11:52:03 浏览: 23
Java中的String类的split()方法默认会去除字符串开头和结尾的分隔符,如果需要保留,则可以使用正则表达式的形式指定分隔符,并使用括号将分隔符括起来。例如:
```java
String str = ",hello,world,";
String[] arr = str.split("(?<=,)|(?=,)");
for(String s : arr) {
System.out.println(s);
}
```
输出结果为:
```
,hello
,world,
```
在上面的例子中,使用正则表达式"(?<=,)|(?=,)"作为分隔符,表示在逗号前或逗号后进行分割。括号将分隔符括起来,保留了分隔符并将其加入到数组中,从而忽略掉了字符串开头和结尾的分隔符。
需要注意的是,这种方式会将分隔符和空白字符一起保留,如果需要去除空白字符,可以在正则表达式中添加空白字符的匹配模式。例如,如果希望去除分隔符后的空白字符,可以使用正则表达式"(?<=\\s*,\\s*)|(?=\\s*,\\s*)"作为分隔符。
相关问题
java String split对首尾分隔符的处理
Java中的String类的split()方法在处理首尾分隔符时需要注意。下面分别介绍一下处理方式:
1. 去除首尾分隔符
如果字符串的开头和结尾都是分隔符,调用split()方法后返回的数组的长度会比实际需要的数组长度多1。这时可以使用String类的trim()方法去除首尾空格或者分隔符,例如:
```java
String str = ",hello,world,";
String[] arr = str.split(",");
for(String s : arr) {
System.out.println(s);
}
```
输出结果为:
```
hello
world
```
2. 保留首尾空白字符串
如果需要保留字符串开头和结尾的空白字符串,可以使用正则表达式的形式指定分隔符。例如,如果希望保留字符串开头和结尾的空白字符串,可以使用^和$表示开头和结尾,在分隔符前后加上这两个符号即可。例如:
```java
String str = " hello world ";
String[] arr = str.split("\\s+");
for(String s : arr) {
System.out.println(s);
}
```
输出结果为:
```
hello
world
```
在上面的例子中,使用正则表达式"\\s+"作为分隔符,表示一个或多个空白字符。由于开头和结尾的空白字符没有分隔符,所以使用正则表达式保留了它们。
stream流string转map
可以使用Java 8的Stream API来将一个字符串流转换为Map。假设字符串流包含键值对,每个键值对通过特定的分隔符分隔,你可以按照以下步骤进行转换:
1. 使用`collect`方法将字符串流转换为一个`Map`对象:
```java
Map<String, String> map = stringStream
.map(s -> s.split(separator)) // 将每个字符串拆分为键值对数组
.collect(Collectors.toMap(arr -> arr[0], arr -> arr[1]));
```
这里的`separator`是分隔符,你需要根据具体的情况进行设置。
如果你的字符串流包含更多的键值对信息,可以根据实际需求进行调整。以上代码假设每个字符串只包含一个分隔符,并且分隔符前后的内容分别作为键和值。
2. 如果你希望在键或值中去除首尾的空格,可以在`toMap`方法之前使用`map`操作:
```java
Map<String, String> map = stringStream
.map(s -> s.split(separator)) // 将每个字符串拆分为键值对数组
.map(arr -> new String[]{arr[0].trim(), arr[1].trim()}) // 去除首尾空格
.collect(Collectors.toMap(arr -> arr[0], arr -> arr[1]));
```
这样就可以将一个字符串流转换为Map对象了。注意,如果键值对中的键存在重复,上述代码将会抛出`java.lang.IllegalStateException`异常。如果你希望处理键重复的情况,可以使用`toMap`方法的重载版本,并提供一个合适的合并函数。