Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 最可靠的分割字符_String - Fatal编程技术网

String 最可靠的分割字符

String 最可靠的分割字符,string,String,更新 如果您被迫在拆分方法中使用单个字符,那么哪个字符最可靠 可靠的定义:一个分割字符,它不是被分割的单个子字符串的一部分 有许多使用字符串分隔符的字符串.Split…我通常喜欢使用“|”符号作为拆分字符。如果您不确定用户在文本中输入的内容,则可以限制用户输入某些特殊字符,您可以从这些字符中选择拆分字符。这在很大程度上取决于使用该字符的上下文。如果你说的是一个非常普遍的划界字符,那么我不认为有一个一刀切的答案 我发现ASCII空字符“\0”通常是一个很好的候选者,或者你可以按照nitzmahon

更新

如果您被迫在拆分方法中使用单个字符,那么哪个字符最可靠


可靠的定义:一个分割字符,它不是被分割的单个子字符串的一部分

有许多使用字符串分隔符的字符串.Split…

我通常喜欢使用“|”符号作为拆分字符。如果您不确定用户在文本中输入的内容,则可以限制用户输入某些特殊字符,您可以从这些字符中选择拆分字符。

这在很大程度上取决于使用该字符的上下文。如果你说的是一个非常普遍的划界字符,那么我不认为有一个一刀切的答案

我发现ASCII空字符“\0”通常是一个很好的候选者,或者你可以按照nitzmahone的想法使用多个字符,然后它可以像你想的那样疯狂


或者,您可以解析输入并转义定界字符的任何实例。

\0是一个很好的分割字符。从键盘输入很难(不可能?),这是合乎逻辑的

\在某些情况下,n是另一个很好的候选者

当然,.Net字符串是unicode的,不需要限制前255个字符。您可以始终使用罕见的蒙古语字母或某些保留或未使用的Unicode符号。

我们目前使用

public const char Separator = ((char)007);

如果我没有弄错的话,我想这是嘟嘟声。

我个人认为这完全取决于情况;如果您正在编写一个简单的TCP/IP聊天系统,显然不应该使用“\n”作为拆分。。但是“\0”是一个很好的字符,因为用户永远不能使用它

这取决于您要拆分的内容

例如,在大多数情况下,最好使用非常常用的拆分字符

价值,价值,价值

值|值|值

键=值;键=值

关键词:价值;关键词:价值

您可以很好地使用带引号的标识符和逗号:

“值”、“值”、“带值、内值”、“值”

我倾向于先使用
,然后再使用
|
,如果两者都不能使用,我就使用分节符
§


请注意,您可以使用
ALT+number
(仅在数字键盘上)键入任何ASCII字符,因此
§
ALT+21
,除了0x0之外,0x0可能不可用(例如,由于以空结尾的字符串),0x1和0x1f之间的ASCII控制字符是很好的候选字符。ASCII字符0x1c-0x1f甚至是为这种情况而设计的,它们的名称有文件分隔符、组分隔符、记录分隔符和单元分隔符。但是,它们在运输格式中是被禁止的,例如

在这种情况下,可以使用来自的字符

最后一个选项是使用转义策略,以便无论如何都可以输入分隔字符。但是,这会使任务变得非常复杂,您不能再使用String.Split。

首先,在C#(或.NET)中,您可以在一次拆分操作中使用多个拆分字符

String.Split方法(Char[])

在此实例中分隔子字符串的Unicode字符数组、不包含分隔符的空数组或空引用(在Visual Basic中为空)

在我看来,没有最可靠的分割字符,但是有些比其他更合适

常用的拆分字符(如制表符、逗号、管道)有助于查看未拆分的字符串/行

如果仅用于存储/处理,则更安全的字符可能是那些很少使用或不容易从键盘输入的字符

它还取决于使用上下文。例如,如果您希望数据包含电子邮件地址,“@”表示否

假设我们要从中挑选一个。有很多可供选择。例如“`”、“^”和一些不可打印的字符。不过要注意一些角色,并非所有角色都适合。例如,0x00可能会对某些系统产生不利影响。

“|”管道符号主要用于传递参数。。只接受字符串类型参数的方法。
这在SQL Server SP中也广泛使用,您需要将数组作为参数传递。大部分情况下,它取决于您需要它的位置。

您可以安全地使用您喜欢的任何字符作为分隔符,如果您转义字符串以便知道它不包含该字符

例如,让我们选择字符“a”作为分隔符。(我特意选择了一个常用字符,以表明任何字符都可以使用。)

使用字符“b”作为转义码。我们用“b1”替换出现的“a”,用“b2”替换出现的“b”:

private static string Escape(string s) {
   return s.Replace("b", "b2").Replace("a", "b1");
}
现在,字符串不包含任何“a”字符,因此您可以将其中几个字符串放在一起:

string msg = Escape("banana") + "a" + Escape("aardvark") + "a" + Escape("bark");
字符串现在如下所示:

b2b1nb1nb1ab1b1rdvb1rkab2b1rk
string[] parts = msg.split('a');
for (int i = 0; i < parts.length; i++) {
  parts[i] = Unescape(parts[i]);
}
现在,您可以拆分“a”上的字符串并获得各个部分:

b2b1nb1nb1
b1b1rdvb1rk
b2b1rk
要解码零件,请反向执行更换:

private static string Unescape(string s) {
   return s.Replace("b1", "a").Replace("b2", "b");
}
因此,拆分字符串并取消部分编码的操作如下:

b2b1nb1nb1ab1b1rdvb1rkab2b1rk
string[] parts = msg.split('a');
for (int i = 0; i < parts.length; i++) {
  parts[i] = Unescape(parts[i]);
}
string[]parts=msg.split('a');
对于(int i=0;i
或使用LINQ:

string[] parts = msg.Split('a').Select<string,string>(Unescape).ToArray();
string[]parts=msg.Split('a').Select(Unescape.ToArray();

如果您选择一个不太常见的字符作为分隔符,那么将转义的出现次数当然会减少。关键是,该方法确保可以安全地将字符用作分隔符,而无需假设数据中存在哪些字符要放入字符串。

它是否会最终出现在ex.message文本中?取决于引发异常的人\n实际上可能发生。但是你可以使用一些罕见的Unicode字符!所以我想希望它永远不会出现在try-and-catch块的异常消息中?不确定这是否是最好的答案,但它是最正确的答案