0

我的问题是我想检查一个字符串是否包含我设置的三个字符数组中的一个或多个,并且在大多数情况下我让它工作但由于一些奇怪的原因一行不想工作而我不想'不知道我做错了什么。

这三个数组是

a = af 小写字母

b = AF 大写字母

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)
    {

    }
}
}

谢谢转发

编辑

没关系,我只是想通了该程序首先找到了仅小写的选项,并没有费心去进一步寻找...

4

3 回答 3

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()也可以。

于 2013-04-10T21:03:09.883 回答
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;
  }

}
于 2013-04-10T21:12:31.500 回答
0

测试“低”的行是错误的,你测试了两次数组 c
更改为

else if (c.Any(x.Contains) == false && a.Any(x.Contains) == true && b.Any(x.Contains) == true)

该错误始终捕获具有混合大小写字母的字符串,并且永远不会达到“low&cap”的else if。

于 2013-04-10T21:07:34.197 回答