F# 修剪空字符

  • 本文关键字:字符 修剪 f# null
  • 更新时间 :
  • 英文 :


我有一个从网络套接字接收的字符串:

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 转义。

相关内容

  • 没有找到相关文章

最新更新