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
}
我有一个从表单获取输入列表的 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
}