Grails,Groovy - tokenize() 将逗号和空格拆分在一起

Grails, Groovy - tokenize() splitting a comma and whitespace together

我有一个从表单获取输入列表的 Grails 项目。 我使用了自动完成 jQuery UI 并像 English, Math, Science, Social Studies, 一样列出了 courses。当我使用 tokenize(', ') 方法时,它会拆分 Social Studies。列表变为 [English, Math, Science, Social, Studies] 如果我使用 tokenize(',') 它不会拆分 Social Studies 但将 null 放在末尾,如 [English, Math, Science, Social Studies, null]

def save(Student studentInstance) {
....
    def courseInputList = params.course.tokenize(', ')
        for (item in courseInputList){  
            def courseID = Course.findByCourseLike(item)
            StudnetCourse.link(studentInstance,courseID)
        }
....
}

我怎样才能让 tokenize() 定界符正好是 ,(one whitespace),而不是 ,(one whitespace)。 我希望我试图解释的是有道理的。

提前谢谢你。

(我知道,现在,javascript 不会在逗号后放置空格。使用一个定界符就可以正常工作。)

改用拆分

params.course = params.course?.split(', ')?: []

params.course.each{ item ->
        def courseID = Course.findByCourseLike(item)
        StudnetCourse.link(studentInstance,courseID)
}

由于您无法控制字符串输入,它在末尾有一个逗号,我建议您在标记化或拆分之前先对输入进行一些处理。

假设您的输入字符串是 input,

def input = params.course

你可以使用切片,

def processedString = input.endsWith(',') ? input[0..input.size() - 1] : input

或使用正则表达式进行字符串减法,

def processedString = input - ~/,\s*$/

这将删除结尾的逗号。唯一的区别是,通过字符串减法,正则表达式还会检查逗号后的任何尾随空格,因此更加灵活。

去掉尾随逗号后,您可以进行标记化或拆分。我建议您使用 ',' 这样做,并在结果输出列表中 trim 删除空格。

def courses = processedString.split(',').collect { it.trim() }

因此生成的代码将是:

def processedString = params.course - ~/,\s*$/
def courses = processedString.split(',').collect { it.trim() }
courses.each { course ->
    //do what you want to do with course
}