使用C#,我可以使用string.Join("", lines)
将字符串数组转换为字符串。
用F#做同样的事情我能做些什么?
我需要从文件中读取行,进行一些操作,然后将所有行连接成一行。
当我运行此代码时
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 ""
答案 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"