我必须在这里处理一个由肮脏的设计引起的问题。我得到一个字符串列表,想从中解析属性。不幸的是,我无法更改创建这些字符串的来源。
例子:
String s = "type=INFO, languageCode=EN-GB, url=http://www.stackoverflow.com, ref=1, info=Text, that may contain all kind of chars., deactivated=false"
现在我想提取属性type
, languageCode
, url
, ref
, info
和 已停用
。
这里的问题是字段info
,它的文本不受引号限制。此字段中也可能出现逗号,因此我不能在字符串末尾使用逗号来找出结束位置。
此外,这些字符串并不总是包含所有属性。 type
、info
和 deactivated
始终存在,其余可选。
有什么建议可以解决这个问题吗?
最佳答案
一种可能的解决方案是在输入中搜索 =
字符,然后将其前面的单个单词作为字段名称 - 似乎您所有的字段名称都是单个单词(没有空格) .如果是这种情况,您可以将 =
之后的所有内容作为值,直到下一个字段名称(用于分隔 ,
)。
这假定该值不能包含 =
。
编辑:
作为处理嵌入式 =
的一种可能方法,您可以查看它前面的单词是否是您已知的字段名称 - 如果不是,您可以将 =
作为嵌入字符而不是运算符。然而,这假设您有一组固定的已知字段(其中一些可能不会总是出现)。如果您知道字段名称区分大小写,则可以放宽此假设。
关于java - 提取字符串的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30631186/