【问题标题】:Split a string with characters %" in groovy在 groovy 中用字符 %" 分割字符串
【发布时间】:2020-04-09 12:01:47
【问题描述】:

例如,我们有一个字符串名称测试,如下所示

def test = "HAVING first_name like "%Hello,Ram%" AND last_name like "%XYZ%",order by id asc,name desc"

所以,拆分后我希望得到类似的结果

test1 = HAVING first_name like "%Hello,Ram%" AND last_name like "%XYZ%"

test2 = order by id asc,name desc

如何在 grooyy 中拆分这些字符串?我尝试通过检查contains(",") 并使用split 函数来拆分它,但它也会拆分"%Hello,Ram%",这不是所需的结果

def a = 'HAVING first_name like "%Hello,Ram%" AND last_name like "%XYZ%",order by id asc,name desc'

def v = a.contains(",")

if(v){
 a.split(",")
 println a
}​​​

【问题讨论】:

  • 请添加您尝试过的代码。
  • @cfrick 我已经更新了上述问题中的代码块。如果我的字符串上没有“%Hello,Ram%”,我可以使用上述程序的输出并操纵输出。但在这种情况下我不能这样做。
  • Split 不会改变a,而是返回一个包含结果的数组。如果你不分配结果,这是一个空操作。
  • @cfrick 那么有什么方法可以返回像[HAVING first_name like "%Hello,Ram%" AND last_name like "%XYZ%",order by id asc,name desc] 这样的数组。如果我们能够在数组中将其拆分为这样,我们可以做另一部分。也许如果可以得到我想要的数组 [1] 的结果,按 id asc,name desc 排序。如果您有任何解决方案,请告诉我。
  • split的结果是这个

标签: gradle grails groovy


【解决方案1】:

根据您的 cmets,听起来您真正想要做的是找到不在 %xxx% 分隔符内的逗号并对其进行拆分。这实际上是 Regex find comma not inside quotes 的副本,其中包含有关正则表达式如何工作的更多信息。

def r = "(?!\\B%[^%]*),(?![^%]*%\\B)"
def test = """HAVING first_name like "%Hello,Ram%" AND last_name like "%XYZ%",order by id asc,name desc"""

def result = test.split(r)

在此,您的 result 将是一个字符串数组(为清楚起见,我没有在这里引用它们):

[
  HAVING first_name like "%Hello,Ram%" AND last_name like "%XYZ%"
  order by id asc
  name desc
]

我在评论中试图说明的一点是,asc 和 name 之间的逗号不在百分号内,因此也会分开。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    相关资源
    最近更新 更多