我有一个从网络套接字接收的字符串:
let websocket = new ClientWebSocket()
let source = new CancellationTokenSource()
let buffer = ArraySegment(Array.zeroCreate 32)
do! websocket.ConnectAsync(url, source.Token)
do! websocket.ReceiveAsync(buffer, source.Token)
let str = Encoding.ASCII.GetString buffer.Array
let trim1 = Regex.replace str " " String.Empty // result is empty string
let trim2 = Regex.replace str "\0" String.Empty // result is empty string
let trim3 = str.TrimEnd [| '\'; '0' |] // result is untouched
我显然试图修剪多余的空字符
在调试器中,str 的值为 "{\"type\":\"hello\"}\0\0
\0\0\0\0\0\0\0\0\0\0\0\0\0\0">打印时,它看起来像:{"type":"hello"},这是有道理的,符号被正确解释。
我似乎无法在 f# 中完成这个简单的任务,我做错了什么?
使用 ASCII 转义可以解决问题:
let trim3 = str.TrimEnd [| 'x00' |]
您也可以使用 unicode 转义序列对其进行转义:
let trim3 = str.TrimEnd [| 'u0000' |]
您的正则表达式版本不起作用,因为在正则表达式中表示空字符的正确方法是使用 "x00"
进行 ASCII 转义,或使用 "u0000"
进行 unicode 转义。