首页 > 解决方案 > 带有分隔符和值的拆分字符串数组

问题描述

我需要在字符串数组中拆分请求参数。

假设我以这种方式收到请求

<API_PATH>?reqPramName=gender=m*AND*age<30*OR*age>60*AND*address=India

现在我想创建两组数组 1) 查询名称/值数组 2) 和/或联合数组

喜欢

Array name/value 
------------------
0  | gender=MAN
------------------
1  | age<30
------------------
2  | age>60
------------------
3  | address=India

Array and/or
------------------
0  | AND
-----------------
1  | OR
----------------
2  | AND

我正在做拆分操作,例如……。

filter.split("AND|OR")

对于正常工作的名称/值,但任何人都可以帮助我从请求参数构造第二个数组(和/或数组)吗?

我的想法是通过映射这两个数组来生成取决于这两个数组的谓词......

1stArray[0]2ndArray[0]1stArray[1]2ndArray[1]

诸如此类的东西……

谁能建议我如何从请求参数生成第二个数组?

标签: javajava-8

解决方案


任何人都可以建议我如何从请求参数生成第二个数组...</p>

那一个其实很简单。你只需要String.indexOf(String, int)

换句话说:您可以使用该方法来识别:

  • 参数字符串中有 AND / OR 子字符串的位置
  • 你可以索引开始

含义:您可以先做indexOf("AND")indexOf("OR")确定第一个关键字。这给出了一个索引 i。现在,您使用上述方法获取索引,在第一个关键字的右侧进行搜索。

换句话说:这个“仅”需要您在参数字符串中进行一些循环和搜索。

但正如我在评论中提到的:我认为你忽略了你想法的真正复杂性。您基本上是在为字符串的内容定义语义。而你正在引入运营商。如果你真的很认真,那么你将不得不考虑你自己发明的运算符的优先顺序。如果这件事“公开”并且拥有多个用户,那么有人出现并希望 AND 优先于 OR 只是时间问题。以及某种使用“括号”来启用术语分组的方式。


推荐阅读