2

我正在使用 Visual Studio 11.0 和 .Net Web 编程我想通过从 RadioButtonList1 中选择将从 TextBox1 输入的字符串转换为 TitleCase、sentenceCase、UpperCase 和小写,并在 Label1.Text 中显示结果。但我不想要我的话在要转换的引号内。示例“ASP.NET”、“Ph.D”和“xyz”。我已经完成了标题大小写、大写和小写的编码,但我希望无论何时出现“相当”,都可以忽略/跳过或过滤此代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Globalization;

 public partial class _Default : System.Web.UI.Page
{
 protected void Page_Load(object sender, EventArgs e)
 {

  }
  private string ConvertToTitleCase(string val)
  {
  string returnString = string.Empty;

System.Globalization.CultureInfo info = System.Threading.Thread.CurrentThread.CurrentCulture;

TextInfo textInfo = info.TextInfo;

returnString = textInfo.ToTitleCase(val);

return returnString;
}
protected void Button1_Click(object sender, EventArgs e)
{
if (RadioButtonList1.SelectedValue == "a")
    {
Label1.Text = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(TextBox1.Text);
Label1.Text = ConvertToTitleCase(TextBox1.Text);

TextBox1.Text.Equals(TextBox1.Text, StringComparison.CurrentCultureIgnoreCase);
    }
else if (RadioButtonList1.SelectedValue == "b")
    {
Label1.Text = "you have selected b";
    }
else if (RadioButtonList1.SelectedValue == "c")
    {
Label1.Text = TextBox1.Text.ToUpper();
    }
else
Label1.Text = TextBox1.Text.ToLower();

}

我需要一个提示或代码,它会忽略 TitleCase、SentenceCase、UpperCase 和 LowerCase If.. 我的字符串在“引号”内。

例子:

String TextBox1 = hello 这是“asp.net”。你在“B.Tech”,欢迎来到“HCT”。

输出:

标题案例:您好,这是“asp.net”。您在“B.Tech”,欢迎来到“HCT”。

SentenceCase:您好,这是“asp.net”。您在“B.Tech”,欢迎来到“HCT”。

大写:你好,这是“asp.net”。您在“B.Tech”,欢迎来到“HCT”。

小写:你好,这是“asp.net”。您在“B.Tech”,欢迎来到“HCT”。

4

2 回答 2

1

我会考虑使用一个字符串包含方法,它返回一个布尔值。您可以检查字符串是否包含引号,然后您可以拆分引号上的字符串并转换您想要的位并保持其余部分不变。如果不是我道歉,我希望我理解正确。

字符串包含的文档。 http://msdn.microsoft.com/en-us/library/dy85x1sa.aspx 用于字符串拆分的文档。 http://msdn.microsoft.com/en-us/library/system.string.split.aspx

希望这可以帮助。

只是在玩你发布的那个课程之前没有使用过那个课程。

using System;
using System.Globalization;
using System.Threading;

  public class FilterString{
    public static void Main(string[] args)
    {
      CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;
      TextInfo textInfo = cultureInfo.TextInfo;

      string textBoxText = "tEsting To upPerCasE 'STAYCAPS'";
      string filterdTextForLabel = textInfo.ToTitleCase(textBoxText) ;
      Console.WriteLine(filterdTextForLabel);

   }
}   

这使用单引号似乎会返回您想要的结果。

输出:测试大写“STAYCAPS”

但是我在想的是,您可以在进行转换之前进行一些过滤,然后为文本输入分配一个变量,然后拆分引号上的字符串,中间部分的任何内容都保持不变,其余部分可以标题大小写。让我知道如果你不能让它工作,我会做出更深入的回应。:D

于 2013-03-28T00:14:00.750 回答
0
private delegate string ConvertFunc(string input);

private string ModifyString(string input, ConvertFunc conversion)
{
    MatchCollection matches = Regex.Matches(input, "\".*?\"");
    int lastPos = 0;
    StringBuilder stringBuilder = new StringBuilder(input.Length);
    foreach (Match match in matches)
    {
        int currentPos = match.Index;
        string toConvert = input.Substring(lastPos, currentPos - lastPos);
        string converted = conversion(toConvert);
        stringBuilder.Append(converted);
        stringBuilder.Append(match.Value);
        lastPos = currentPos + match.Length;
    }

    if (lastPos < input.Length)
    {
        stringBuilder.Append(conversion(input.Substring(lastPos)));
    }

    return stringBuilder.ToString();
}

private string ToUpper(string toConvert)
{
    return toConvert.ToLower();
}

然后从您的代码中调用 ModifyString 方法:

string modifiedString = ModifyString("This can be converted \"This cannot be converted\"", ToUpper);
于 2013-03-29T09:58:01.747 回答