web-dev-qa-db-ja.com

Scala

入力(引数)に基づいて文字列を作成したい次のコードがありますが、答えが正しくありません。 args(0)はパス、args(1)は「+」のようなオペランド、args(2)は数値です(そしてそれらの間にスペースを入れたい:

 //some code ..
 var Statement=""
 for (j<-0 to 2)
    {
         if (Files.exists(Paths.get(args(j)))){
            Statement.concat(inputXml)
            Statement.concat(" ")
            }
         else{
            Statement.concat(args(j))
            Statement.concat(" ")
            }
         println(args(j))
         println(Statement)
    }
    println(Statement)
    //some code ...

出力は空白です!私は このリンクを参照として を使用しました。これについて私を助けてくれませんか。私はScalaが初めてです。ありがとう。

9
Rubbic

String.concatは、まったく新しいStringオブジェクトを返します。現在のStatement変数はまったく変更されません。次のことはお勧めしませんが、技術的に変更する必要があるのは、Statementをすべてのconcat呼び出しの戻り値に再割り当てすることだけです。

 //some code ..
 var Statement=""
 for (j<-0 to 2)
 {
   if (Files.exists(Paths.get(args(j)))){
     Statement = Statement.concat(inputXml)
     Statement = Statement.concat(" ")
   }
   else{
     Statement = Statement.concat(args(j))
     Statement = Statement.concat(" ")
   }
   println(args(j))
   println(Statement)
 }
 println(Statement)
 //some code ...

よりパフォーマンスの高いソリューションは、代わりに StringBuilder を使用することです。

val Statement = StringBuilder.newBuilder

Statement.append(...)

println(Statement.toString)
13
Karl