我编写了以下代码来在C#中进行不区分大小写的替换:
Regex.Replace(textBoxText,
Regex.Escape(findText),
replaceText,
RegexOptions.IgnoreCase);
Run Code Online (Sandbox Code Playgroud)
只是想检查,这是否是正确的方法,还是有更好的方法,我是否忽略了一些我应该更好地意识到的东西.
注意:请不要向我提供一些手工制作的代码,我使用了codeproject中的快速替换功能,并且该代码在客户端崩溃,我无法知道用户使用了什么输入.所以,我更喜欢一些简单但正确可靠的方法.
我在Delphi中做了很多项目,它使用不区分大小写的语言Pascal,我想知道区分大小写的语言的优点是什么.
杰森认为 "案例不敏感会带来很多歧义".我不同意.如果您意识到该语言不区分大小写,那么即使您从未编写过前者,您也知道这WHILE意味着同样的事情while.变量和函数也一样; 骆驼套管很好,但是第一个字母还是资本还是没有?那些名称以下划线开头的函数呢?如果不敏感的语言没有问题:_fooBar将做得很好_FooBar.那么贾森所指的模糊性在哪里呢?是的,你可以用不同的方式写一个变量,但意思是明确的!FooBar== foobar!
在同一个线程Delnan 说那Capitalization is the difference between "I had to help my uncle Jack off a horse.." and "I had to help my uncle jack off a horse..".非常聪明 :-).但是,与专业案例敏感相比,这是一个反对意见:您是否会因为单一的大写错误而接受您的代码变得混乱?同样,在不区分大小写的语言中,如果Jack是一个人,那么也是如此jack.
问题:是否有人在区分大小写的语言中使用此功能,您可以通过不同的大写来定义两个不同的变量或函数?因为这是我能看到的唯一优势.当然,你会说,我用驼峰套管写了变量名,而常量全是大写.但IMO他们是不相容的; userName作为一个变量是有道理的,但USERNAME作为一个常数不是.
(我意识到许多程序员使用区分大小写的语言,所以我准备迎接不受欢迎的接待:-))
编辑
此问题的触发器是Lynda.com的"Flash CS3 Professional中的ActionScript 3.0"培训视频,其中Todd Perkins花费了一半的时间来强调大写:-)
我创建了一个C#结构,它可以透明地处理不区分大小写的字符串比较.例如:
List<IString> list = new List<IString>();
list.Add("help");
Assert.IsTrue(list.Contains("Help"));
Run Code Online (Sandbox Code Playgroud)
要么
Dictionary<IString, string> dict = new Dictionary<IString, string>();
dict["Help"] = "thanks!";
Assert.AreEqual("thanks!", dict["hELP"]);
Run Code Online (Sandbox Code Playgroud)
但是我无法弄清楚的一件事(也许是不可能的)是如何让类字符串在.Equals(object)中很好地发挥作用:
IString A1 = "A";
string A2 = "a";
Assert.AreEqual(A1, A2, "This passes");
Assert.AreEqual(A2, A1, "This fails");
Run Code Online (Sandbox Code Playgroud)
这是代码:
using System;
using System.Collections.Generic;
namespace Util
{
/// <summary>
/// Case insensitive wrapper for the string class
/// </summary>
public struct IString :
IComparer<IString>,
IComparable,
IComparable<IString>,
IComparable<string>,
IEquatable<string>,
IEquatable<IString>
{
private const StringComparison icase = StringComparison.OrdinalIgnoreCase;
public readonly string Value;
public …Run Code Online (Sandbox Code Playgroud) 看这个:
"nAo".match(/(nao)/i) # => #<MatchData "nAo" 1:"nAo">
"nÃo".match(/(não)/i) # => nil
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这个问题?
编辑:似乎ruby在i标志的regexp比较中缺乏对unicode字符的支持(忽略大小写)...使用MRI 1.8.7p249
我有一个名为path的List我正在使用以下代码对字符串进行排序
java.util.Collections.sort(path);
Run Code Online (Sandbox Code Playgroud)
这工作正常,它排序我的列表,但它以不同的方式处理第一个字母的情况,它用大写字母对列表进行排序,然后用小写字母对列表进行排序,如果我有以下猫狗Bird Zebra它会像它一样排序
Bird
Zebra
dog
cat
Run Code Online (Sandbox Code Playgroud)
所以我如何忽略案例,以便狗和猫会在斑马之前但在鸟之后呢?感谢您的任何帮助
我在哪里可以找到不区分大小写的版本strtr?
strtr 超载,我说的是以下一个
string strtr ( string $str , array $replace_pairs )
Run Code Online (Sandbox Code Playgroud) 我有一个类似问题,即XPath忽略大小写的SelectNodes问题,但在我的情况下,大写/小写问题是在名称为“ application”的节点中(有时是“ Application”,有时是“ application”)。
我将如何应用其他帖子的解决方案?还是在这种情况下适用另一种?
xml:
<?xml version="1.0" encoding="utf-16" ?>
<application>
<forms>
<action type="update">
<form uid="" >
</form>
</action>
</forms>
</application>
Run Code Online (Sandbox Code Playgroud)
在C#3.5中:
XmlNode nodex= oXMLDoc1.SelectSingleNode("Application/forms/action/form/@uid")
nodex.Value="UniqueIDx";//nodex is null :S
Run Code Online (Sandbox Code Playgroud) 当我正在做一个if语句时,如果字符串是一个大写单词,它就不起作用,因为它抓住了我的搜索字符串的单词.
例:
的index.php?信道=测试
<?php
$channel_query = $_GET['channel'];
$channel_query = $_GET['channel'];
if ($channel_query == "test") {
echo "Claimed";
} elseif($channel_query == "test1") {
echo "Claimed";
}
if(strtolower($channel_query) == strtolower($channel_query)){
} else
echo "N/A";
Run Code Online (Sandbox Code Playgroud)
因此,如果字符串是"Test",则它不起作用,因为它是大写的.有任何想法吗?
我有一个名为work的表,其中包含企业中每个人的注册信息,如下所示:
表:工作
FirstName LastName SponsorshipStatus EnrollmentStatus AdjudicationStatus
--------- -------- ----------------- ---------------- ------------------
JANE DOE Complete Incomplete Incomplete
JOHN DOE Complete Complete Incomplete
MONTY PYTHON Complete Complete Complete
MARY POPPINS Complete Complete Complete
Run Code Online (Sandbox Code Playgroud)
部门经理给我一份她的员工名单,如下面的员工,她需要更新状态:
表:员工
FirstName LastName
--------- --------
John Doe
Mary Poppins
Humpty Dumpty
Run Code Online (Sandbox Code Playgroud)
知道两个表的情况不匹配,我尝试以下查询:
SELECT employees.FirstName, employees.LastName,
SponsorshipStatus, EnrollmentStatus, AdjudicationStatus
FROM employees LEFT JOIN work
ON (UPPER(employees.FirstName) LIKE UPPER(work.FirstName)
AND UPPER(employees.LastName) LIKE UPPER(work.LastName));
Run Code Online (Sandbox Code Playgroud)
......它产生以下结果:
查询结果:
FirstName LastName SponsorshipStatus EnrollmentStatus AdjudicationStatus
--------- -------- ----------------- ---------------- ------------------
JOHN DOE NULL NULL …Run Code Online (Sandbox Code Playgroud) 有词典:
var dictionary1 = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase)
{{"abc1", 1}, {"abC2", 2}, {"abc3", 3}};
Run Code Online (Sandbox Code Playgroud)
我可以得到一个值:
var value = dictionary1["Abc2"];
Run Code Online (Sandbox Code Playgroud)
如果搜索键"Abc2"我需要获取原始键"abC2"和值2.
如何通过不区分大小写的密钥获取原始案例密钥?