F#将String Array转换为String

时间:2011-05-27 20:28:16

标签: string f#

使用C#,我可以使用string.Join("", lines)将字符串数组转换为字符串。 用F#做同样的事情我能做些什么?

ADDED

我需要从文件中读取行,进行一些操作,然后将所有行连接成一行。

当我运行此代码时

open System.IO
open String

let lines = 
  let re = System.Text.RegularExpressions.Regex(@"#(\d+)")
  [|for line in File.ReadAllLines("tclscript.do") ->
      re.Replace(line.Replace("{", "{{").Replace("}", "}}").Trim(), "$1", 1)|]

let concatenatedLine = String.Join("", lines)

File.WriteAllLines("tclscript.txt", concatenatedLine)

我收到了这个错误

error FS0039: The value or constructor 'Join' is not defined

我尝试使用此代码let concatenatedLine = lines |> String.concat ""来获取此错误

error FS0001: This expression was expected to have type
    string []    
but here has type
    string

解决方案

open System.IO
open System 

let lines = 
  let re = System.Text.RegularExpressions.Regex(@"#(\d+)")
  [|for line in File.ReadAllLines("tclscript.do") ->
      re.Replace(line.Replace("{", "{{").Replace("}", "}}"), "$1", 1) + @"\n"|]

let concatenatedLine = String.Join("", lines)
File.WriteAllText("tclscript.txt", concatenatedLine)

这个也有效。

let concatenatedLine = lines |> String.concat ""

3 个答案:

答案 0 :(得分:14)

使用String.concat?

["a"; "b"]
|> String.concat ", " // "a, b"

<强>编辑:

代码中的

File.WriteAllLines 替换为 File.WriteAllText

let concatenatedLine = 
    ["a"; "b"]
    |> String.concat ", "

open System.IO

let path = @"..."
File.WriteAllText(path, concatenatedLine)

答案 1 :(得分:4)

从fsi控制台窗口复制:

> open System;;
> let stringArray = [| "Hello"; "World!" |];;

val stringArray : string [] = [|"Hello"; "World!"|]

> let s = String.Join(", ", stringArray);;

val s : string = "Hello, World!"

>

编辑:

当然,使用.NET框架类库中的String.Join比使用F#核心库中的String.concat更不惯用。我只能假设这就是为什么有人投票给我的答案,因为那个人没有延长礼貌来解释投票。

正如我在下面的评论中提到的,我发布这个答案的原因是,在所有其他答案中使用String.concat可能会误导随意读者认为String.Join在F#中根本不可用。

答案 2 :(得分:0)

List.ofSeq "abcd" |> List.toArray |> (fun s -> System.String s) |> printfn "%A"
List.ofSeq "abcd" |> List.toArray |> (fun s -> new System.String(s)) |> printfn "%A"