基于play框架的scala多标签系统

基于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

我正在使用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
      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
来组装我们的链接