基于play框架的scala多标签系统
我正在使用scala和play框架。我想制作一个类似twitter的散列标签系统。但是我在使用多散列标签的情况下遇到了问题。 这是我的控制器代码基于play框架的scala多标签系统,scala,playframework-2.0,Scala,Playframework 2.0,我正在使用scala和play框架。我想制作一个类似twitter的散列标签系统。但是我在使用多散列标签的情况下遇到了问题。 这是我的控制器代码 def hashTag = Action{ implicit request => val body = request.body.asFormUrlEncoded var textValue=body.get("text").get(0) //get text value from post method
def hashTag = Action{ implicit request =>
val body = request.body.asFormUrlEncoded
var textValue=body.get("text").get(0) //get text value from post method
textValue = textValue.trim()
val array = textValue.split(" ") //split from 'space' to get first word
val firstWord = array(0)
if (firstWord.length() > 1) {
val split = firstWord.split("#") //split word from #
if (split.length >= 2) {
val hashTag = split(1) //fetch first hash-tag from textValue variable
val link = "<a href=\"/hashtag/" + hashTag + "\">" + hashTag + "</a>" //create a link to hash-tag page
textValue=textValue.replace(hashTag, link)
//Insert textValue in database
}//end if
}//end if
}//end hashTag
def hashTag=Action{implicit request=>
val body=request.body.asFormUrlEncoded
var textValue=body.get(“text”).get(0)//从post方法获取文本值
textValue=textValue.trim()
val array=textValue.split(“”//从“space”拆分以获取第一个单词
val firstWord=数组(0)
if(firstWord.length()>1){
val split=firstWord.split(“#”)//从#
如果(拆分长度>=2){
val hashTag=split(1)//从textValue变量获取第一个哈希标记
val link=”“//创建指向哈希标记页的链接
textValue=textValue.replace(标签,链接)
//在数据库中插入textValue
}//如果结束
}//如果结束
}//结束标签
如果我像下面给出的字符串一样给出输入,那么我在Scala哈希标记的两个实例上都得到了超链接,但在Java哈希标记上没有。我想用Java替换Java散列标记并存储在数据库中
#scala#java#scala
我怎么做,请帮忙。提前感谢。您的代码没有运行,因为您实际上没有一个循环遍历所有的hashtag。它只获取它找到的第一个hashtag并替换字符串中的hashtag,而不会继续到下一个 如果使用,您的解决方案可以简化很多。您可以定义一个与hashtags匹配的正则表达式:
#(\w+)
。在正则表达式中,\w+
表示我们在匹配单词字符,#(\w+
表示我们在#
符号后匹配单词字符。如果您还想支持数字,只需使用\d
以以下方式扩展它:#([\w\d]+)
在Scala中,正则表达式将按以下方式使用:
val textValue: String = "#scala #java #scala" // Our strings we're testing
val hashTagPattern: Regex = """#(\w+)""".r // The regular expression we defined
val textWithLinks: String = hashTagPattern.replaceAllIn(textValue, { m =>
val hashTag = m.group(1) // Group 1 is referencing the characters in the parentheses
s"""<a href="/hashtag/$hashTag">$hashTag</a>""" // We assemble the link using string interpolation
})
println(textWithLinks)
// Output: <a href="/hashtag/scala">scala</a> <a href="/hashtag/java">java</a> <a href="/hashtag/scala">scala</a>
val textValue:String=“#scala#java#scala”//我们正在测试的字符串
val hashTagPattern:Regex=“”#(\w+)”。r//我们定义的正则表达式
val textWithLinks:String=hashTagPattern.replaceAllIn(textValue,{m=>
val hashTag=m.group(1)//组1正在引用括号中的字符
s“”//我们使用字符串插值来组装链接
})
println(textWithLinks)
//输出:
因此,我们定义一个hashTagPattern
,然后调用replaceAllIn
,它包含两个参数:要替换的字符串和处理匹配的函数。此函数的类型定义为:Match=>String
接下来我们创建这个函数:m
是我们的匹配项,我们使用.group(1)
来获取#
符号后面的标签字符串。之后,我们可以使用“…”
来不必转义字符串,并使用嵌入在字符串中的$variableName
来组装我们的链接