我的问题是,我想检查一个字符串是否包含我设置的三个字符数组中的一个或多个,并且在大多数情况下我让它工作但是由于一些奇怪的原因,一行不想工作和我不知道我做错了什么。
三个数组是
a = a-f小写字母
b = A-F大写字母
c = 1-6号
该计划适用于:
小写,大写,数字,小写+数字,大写+数字和小写+大写+数字,
但是不起作用的是小写+资本,即(c.Any(x.Contains) == false && a.Any(x.Contains) == true && b.Any(x.Contains) == true)
代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
Char[] a = { 'a', 'b', 'c', 'd', 'e', 'f' };
Char[] b = { 'A', 'B', 'C', 'D', 'E', 'F' };
Char[] c = { '1', '2', '3', '4', '5', '6' };
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = "";
if(textBox2.Text != "")
{
Char[] x = textBox2.Text.ToCharArray();
if (c.Any(x.Contains) == true && a.Any(x.Contains) ==false && b.Any(x.Contains)==false)
{
textBox1.Text = "num";
}
else if (b.Any(x.Contains) == true && c.Any(x.Contains) == false && a.Any(x.Contains) ==false)
{
textBox1.Text = "cap";
}
else if (a.Any(x.Contains) == true && c.Any(x.Contains) == false && c.Any(x.Contains) == false)
{
textBox1.Text = "low";
}
else if (c.Any(x.Contains) == false && a.Any(x.Contains) == true && b.Any(x.Contains) == true)
{
textBox1.Text = "low&cap";
}
else if (a.Any(x.Contains) == true && c.Any(x.Contains) == true && b.Any(x.Contains) == false)
{
textBox1.Text = "low&num";
}
else if (b.Any(x.Contains) == true && c.Any(x.Contains) == true && a.Any(x.Contains) == false)
{
textBox1.Text = "cap&num";
}
else if (a.Any(x.Contains) == true && b.Any(x.Contains) == true && c.Any(x.Contains) == true)
{
textBox1.Text = "cap&num&low";
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}
先谢谢
修改
没关系,我只想出来 该程序首先找到了只有小写的选项,并且没有进一步查看......
答案 0 :(得分:2)
这样的东西?
Char[] lower = { 'a', 'b', 'c', 'd', 'e', 'f' };
Char[] upper = { 'A', 'B', 'C', 'D', 'E', 'F' };
Char[] number = { '1', '2', '3', '4', '5', '6' };
List<string> types = new List<string>();
if(lower.Any(l=>x.Contains(l))
types.Add("low");
if(upper.Any(u=>x.Contains(u))
types.Add("cap");
if(number.Any(n=>x.Contains(n))
types.Add("num");
textbox1.Text = string.Join("&",types);
请注意,您不必将输入字符串转换为char
数组 - string.Contains()
也可以。
答案 1 :(得分:1)
您是否考虑过撰写扩展程序?他们非常好!
private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = textBox2.Text.MyContains();
}
当然,您可以将该扩展名更改为适合您的名称。
扩展需要进入静态类,并且可以像这样简单:
public static class Extensions {
private static Char[] a = { 'a', 'b', 'c', 'd', 'e', 'f' };
private static Char[] b = { 'A', 'B', 'C', 'D', 'E', 'F' };
private static Char[] c = { '1', '2', '3', '4', '5', '6' };
public static string MyContain(this string value) {
Char[] x = value.ToCharArray();
string result = null;
if (a.Any(l => x.Contains(l))) {
result = "low";
}
if (b.Any(c => x.Contains(c))) {
result = String.IsNullOrEmpty(result) ? "cap" : result + "&cap";
}
if (c.Any(n => x.Contains(n))) {
result = String.IsNullOrEmpty(result) ? "num" : result + "&num";
}
return result;
}
}
答案 2 :(得分:0)
测试“低”的行是错误的,你测试两次数组c
改为
else if (c.Any(x.Contains) == false && a.Any(x.Contains) == true && b.Any(x.Contains) == true)
该错误始终捕获带有大小写混合字母的字符串,如果永远不会达到“low&amp; cap”则为else。