Java 如何解析一个字符串,该字符串只包含arraylist部分需要的值?
我有一个字符串如下所示:Java 如何解析一个字符串,该字符串只包含arraylist部分需要的值?,java,regex,Java,Regex,我有一个字符串如下所示: String a=“姓名:String,年龄:int,地址:String,城市:String,邮编:int” 字符串由,和分隔:它是字段名和类型。每个值之间可能有空格,但应忽略任何空格 我想要的是将这个字符串转换成一个只包含内容fieldName的arrayList 因此,上面的示例将成为 列表结果=新建ArrayList结果中应该有姓名、年龄、地址、城市、邮编的值。其他一切都应该被忽略 如何使用Java中的正则表达式实现这一点 我可以通过先按,拆分字符串数组,然后按:
String a=“姓名:String,年龄:int,地址:String,城市:String,邮编:int”代码>
字符串由,
和分隔:
它是字段名
和类型
。每个值之间可能有空格,但应忽略任何空格
我想要的是将这个字符串转换成一个只包含内容fieldName
的arrayList
因此,上面的示例将成为
列表结果=新建ArrayList
结果中应该有姓名、年龄、地址、城市、邮编的值。其他一切都应该被忽略
如何使用Java中的正则表达式实现这一点
我可以通过先按,
拆分字符串数组,然后按:
拆分字符串数组,然后将数组的第一个元素添加到列表中来实现这一点
我问这个问题的原因是因为我想知道是否有一种更优雅的方法来处理regex 下面的正则表达式将为您提供所需的结果
[a-z]+[^, ](?=:)
第一个括号称为“向前看”,因此a:之前的任何内容都将被选中,第一组括号表示我们需要任何字符a-z(注意,这些字符区分大小写,因此如果可以使用大写,请添加+[a-z]),最后一组括号表示否或空格
要在java中使用它,您需要按照
Pattern.compile("[a-z]+[^, ](?=:)")
.matcher(a)
.find();
我用了很多来测试正则表达式,它是一个非常有用的工具
String[] b = a.split(":[^,]+(?:, *)?");
或:
有人能评论一下为什么投票被否决吗?@Andreas我在描述中补充了我尝试过的东西。问这个问题的全部原因是检查我是否可以一步而不是多步完成。这不是最初的问题的理解方式。上面写着“我想要这个,告诉我怎么做”——您仍然没有显示您尝试过的代码。不要解释代码,展示它!这将匹配所有类型(string,int,string,string,int
),但OP需要名称(name,age,address,city,zip
)。刚刚测试过,你得到了什么结果?您在哪里进行测试?代码现在可以工作了,但只有在使用regexfind()
循环时,而不是在使用split()
时。问题和答案都没有显示正则表达式是如何使用的。问题和答案都不完整<代码>非特定问题+非特定问题=大规模混乱
@OPK
String[] b = Pattern.compile("[^, ]+(?=:)").matcher(a).results()
.map(r -> r.group()).toArray(String[]::new);