如何解决使用分割功能和IGNORING引号分隔CSV文件
我有一个来自csv文件的字符串=“ 10”,“ 100”,“ 11”,“ 1” 而且我想在 Java 上将其拆分成这样的数组:
10,100,11,1
我一直在使用这段代码,但是我需要在“不包括引号”中添加一部分,是 可能?如果没有,我怎么能轻松地从中获取整数值?
String str = "\"10\",\"100\",\"11\",\"1\"";
String[] tokens = str.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)",-1);
任何帮助将不胜感激。谢谢!
解决方法
如果您愿意使用不需要正则表达式而是使用流API的解决方案,则可以用逗号split
String
,用逗号隔开,流式处理,删除双引号围绕每个项目并将其解析为int
:
public static void main(String[] args) {
String str = "\"10\",\"100\",\"11\",\"1\"";
// stream the results of splitting by comma
List<Integer> numbers = Arrays.stream(str.split(","))
// parse the int after removíng the double-quotes
.map(s -> Integer.parseInt(s.replace("\"","")))
// and return a list of integers
.collect(Collectors.toList());
// then print the integers
numbers.forEach(System.out::println);
}
此输出
10
100
11
1
或者,您也可以创建int[]
而不是List<Integer>
,方法如下(具有与上图所示相同的输出):
public static void main(String[] args) {
String str = "\"10\",\"1\"";
// stream the results of splitting by comma
int[] numbers = Arrays.stream(str.split(","))
// parse and map to int after removíng the double-quotes
.mapToInt(s -> Integer.parseInt(s.replace("\"","")))
// and make it an array
.toArray();
// then print the integers
Arrays.stream(numbers).forEach(System.out::println);
}
,
您可以简单地按以下方式获得String[]
:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
String str = "\"10\",\"1\"";
// Replace double quote with blank
str = str.replace("\"","");
// Split the resulting string on comma
String[] arr = str.split(",");
// Display the resulting array
System.out.println(Arrays.toString(arr));
}
}
输出:
[10,100,11,1]
或者,
import java.util.List;
import java.util.regex.MatchResult;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
String str = "\"10\",\"1\"";
List<Integer> list=Pattern.compile("\\d+")
.matcher(str)
.results()
.map(MatchResult::group)
.map(Integer::valueOf)
.collect(Collectors.toList());
System.out.println(list);
}
}
请注意,替代解决方案返回List<Integer>
。如果您需要List<String>
,请从其中删除.map(Integer::valueOf)
。
尝试一下,
String str = "\"10\",\"1\"";
String[] arr = str.replaceAll("(^\"|\"$)","").split("\",\"");
System.out.println(Arrays.toString(arr));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。