我需要检查 Array1 中的 CHAR 是不是包含我的 Array2 中的一些 CHAR,但我不能将 Contains 用于 CHAR... 如何解决? [关闭]
Posted
技术标签:
【中文标题】我需要检查 Array1 中的 CHAR 是不是包含我的 Array2 中的一些 CHAR,但我不能将 Contains 用于 CHAR... 如何解决? [关闭]【英文标题】:I need to check if CHAR from Array1 contains some CHAR from my Array2 but I cant use Contains for CHAR... How to solve it? [closed]我需要检查 Array1 中的 CHAR 是否包含我的 Array2 中的一些 CHAR,但我不能将 Contains 用于 CHAR... 如何解决? [关闭] 【发布时间】:2022-01-02 20:15:08 【问题描述】:我需要将一个电话号码(写得不好)转换为正确的格式。示例:+ 420 741-854()642。至 +420741854642 enter image description here
【问题讨论】:
idownvotedbecau.se/imageofcodestring result = "+" + string.Concat(source.Where(c => c >= '0' && c <= '9'));
你倒退了,你想检查你的有效字符列表是否包含循环迭代中的字符。
【参考方案1】:
我想我只是用正则表达式替换所有非数字;
var messy = "+ 420 741-854()642";
var clean = Regex.Replace(messy, "[^+0-9]", "");
对于正则表达式模式[^+0-9]
,这意味着“来自的单个字符,集合:(所有字符除外)+
或0
到9
所以在实践中这个模式匹配空格@987654326 @、连字符 -
、括号 ()
等。任何匹配的字符(即坏字符)都被替换为空
【讨论】:
【参考方案2】:如果您想按照图片中显示的样式进行操作,则可以通过以下操作进行修复:
string number = "+ 420 741-854()642.";
char[] povolene = '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+' ;
for(int i = 0; i < number.Length; i++)
if (povolene.Contains(number[i]))
.
.
.
【讨论】:
谢谢你 【参考方案3】:这是 RegEx(正则表达式)的工作 :) 你可以有这样的东西: /+?\d+/gm 它将从 +420741-854()642 返回三个匹配项为 ['+420741', ' 854', '642'] 当然可以连接起来。您也可以事先将 '+' 替换为 '00',然后连接 /\d+/gm 中的匹配项。这只是匹配字符串中的所有数字。
https://regex101.com/ 是学习 RegEx 的绝佳资源。
【讨论】:
【参考方案4】:从技术上讲,您可以在 Linq 的帮助下过滤掉数字 (c >= '0' && c <= '9'
):
using System.Linq;
...
string source = "+ 420 741-854()642.";
string result = "+" + string.Concat(source.Where(c => c >= '0' && c <= '9'));
【讨论】:
还是 Char.IsDigit? @Caius Jard:Char.IsDigit
在所有 unicode 数字上返回 true
,(例如,波斯数字,۱۲۳
),而不仅仅是 0..9
"+" 仅应在输入字符串以“+”或“00”开头时添加。因为如果输入字符串中省略了国家/地区代码,您可能会连接无效数字...
@lidqy:这就是为什么我开始回答“从技术上讲,你可以......”。如果电话号码可以是不同的格式(有或没有国家/地区代码),无效需要详细分析,我们没有来自问题的信息来执行它
@DmitryBychenko 是的,这超出了问题的范围,但仍然要考虑是否要验证电话号码并正确格式化电话号码......以上是关于我需要检查 Array1 中的 CHAR 是不是包含我的 Array2 中的一些 CHAR,但我不能将 Contains 用于 CHAR... 如何解决? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
java检查char是不是是switch case语句中的数字[关闭]