Erlang 我可以在字符串中设置特定的字节吗?

Erlang 我可以在字符串中设置特定的字节吗?,erlang,Erlang,我从os:cmd返回了很长的字符串。我的exe文件输出包含一些代码为4的符号,因此我将它们替换为其他符号,并将meta放在输出的开头。现在我想把符号换回来。我怎样才能以最快的方式做这件事 Erlang字符串是列表。Erlang列表是不可变的。因此,您不能更改字符串中的特定字节,只能生成替换了这些字节的另一个字符串 要么再次替换字符(使用map),要么传递原始字符串。我是Erlang noob,所以这个答案很可能不是最佳答案。在Erlang编程书中我还没有读到的一章中,可能有一个函数实现了这一点。

我从os:cmd返回了很长的字符串。我的exe文件输出包含一些代码为4的符号,因此我将它们替换为其他符号,并将meta放在输出的开头。现在我想把符号换回来。我怎样才能以最快的方式做这件事

Erlang字符串是列表。Erlang列表是不可变的。因此,您不能更改字符串中的特定字节,只能生成替换了这些字节的另一个字符串


要么再次替换字符(使用
map
),要么传递原始字符串。

我是Erlang noob,所以这个答案很可能不是最佳答案。在Erlang编程书中我还没有读到的一章中,可能有一个函数实现了这一点。然而,我认为这正是你想要的:

-module(replace).
-export([replace/3]).

replace([], _, _) -> [];
replace([OldChar | T], OldChar, NewChar) -> [NewChar | replace(T, OldChar, NewChar)];
replace([H | T], OldChar, NewChar) -> [H | replace(T, OldChar, NewChar)].
它只是遍历列表(您的字符串)并用新字符替换旧字符。它不能处理I18N。也许有更快的方法可以做到这一点。它将允许您执行以下操作:

24> replace:replace([48,49,50,51,52,53,54,55,56,57], 53, 45).
"01234-6789"
或者这个:

28> replace:replace("39582049867", 57, 45).
"3-58204-867"

就最快的方式而言——我猜这将是一个提供的函数。如果没有,您必须以不同的方式编写代码并运行数字。

一些代码,加上命令输出将不胜感激!它并没有真正替换字符,而是返回一个新的字符串,其中替换了字符。@rvirding好吧,因为数据是不可变的,所以不能真正内联更改它。这就是为什么需要用新字符串替换字符串。