我编写了以下代码片段来消除文本块中的过多空格
int index = text.IndexOf(" ");
while (index > 0)
{
text = text.Replace(" ", " ");
index = text.IndexOf(" ");
}
Run Code Online (Sandbox Code Playgroud)
一般来说,这种方法很好,虽然相当原始,可能效率低下.
当文本包含" - "的某些bizzare原因时indexOf返回一个匹配!替换功能不会删除任何东西,然后它会卡在无限循环中.
有关string.IndexOf的任何想法吗?
我真的被这个难倒了.我正在学习LINQ并使用Microsoft Visual C#Express Edition连接到包含有关我的书籍信息的SQL Server数据库.我根据需要创建了LINQ to SQL类.那东西显然有效.这一切都有效,除了我无法弄清楚为什么,如果我搜索"SR"(大写),它会找到两个记录,"SR-71 Revealed,The Inside Story",如预期的那样,但它也发现"褪色太阳:Kesrith"其中"sr"是小写的.我正在使用字符串类的IndexOf()方法,它应该执行case-SENSITIVE比较,对吧?输出显示第二个书名,如上所示,"sr"为小写.这是代码的相关部分:
// normal using directives here
namespace QueryBooksDB {
class Program {
static void Main() {
var urgh = new BooksDataContext();
Console.WriteLine("Enter a string to search for:");
string str = Console.ReadLine();
var list = from book in urgh.Books
where book.Title.IndexOf(str) > -1
orderby book.Title
select new { ID = book.BookId, book.Title, book.Location };
foreach ( var b in list ) {
Console.WriteLine(b.Title);
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我的应用程序中有一个(大)字符串文件,其中包含一系列随机字符[aZ]和[0-9]以及";","/","?",":"和"@".我希望我的申请告诉我连续显示6位数的最近位置(如"105487"或"558463").
实现这一目标的最佳方法是什么?感谢您对此进行调查.
VB2010.我正在尝试使用Enumeration单位的内容填充ComboBox.我已经设法用字典做了这个.就像是
Dim dUnits As New Dictionary(Of String, Integer)
Dim da As String
For Each enumValue As eUnits In System.Enum.GetValues(GetType(eUnits))
da = ConvertEnumToCommonName 'gets unique name for an enumeration
dUnits.Add(da, enumValue)
Next
cbo.DisplayMember = "Key" 'display the the common name
cbo.ValueMember = "Value" 'use the enumeration as the value
cbo.DataSource = New BindingSource(dUnits, Nothing)
Run Code Online (Sandbox Code Playgroud)
当我加载我的表格运作良好.现在,用户可以选择要显示的默认单位.那么我试试吧
Dim defUnits As eUnits = eUnits.Feet
Dim idx As Integer = cbo.Items.IndexOf(defUnits) 'doesnt work, returns a -1
cbo.SelectedIndex = idx
Run Code Online (Sandbox Code Playgroud)
我已经做了一段时间的研究,并且相当肯定这与ComboBox将值存储为字符串有关,实际上我正在搜索一个整数的枚举.不知道我是否有这个权利.无论如何,我似乎无法选择默认项目.我可以尝试另一种方法吗?
var longString = "this string is long but why"
var shortString = "but why"
Run Code Online (Sandbox Code Playgroud)
我如何测试shortString是否不仅包含在longString中,而且它实际上是字符串的最后一部分.
我曾经indexOf == 0测试过字符串的开头但不知道如何结束它
我很好奇是否存在indexOf可用于JavaScript Array和StringJavaScript 的方法的效率差异.我认为indexOfString上的效率低于Array,我的新测试结果支持这一点.例如:
var arr = ['abc', 'ab', 'abz', '1'];
var str = 'abcababz1';
var needle = 'abxx';
//concatenate to make them bigger
for (var i = 0; i < 30; i++) {
arr = arr.concat(arr);
str = str.concat(str);
}
arr.push(needle); //append needle last
str = str.concat(needle);
Run Code Online (Sandbox Code Playgroud)
然后我用了开始和结束时间戳
arr.indexOf(needle); // faster!
str.indexOf(needle);
Run Code Online (Sandbox Code Playgroud)
我在节点中做了这个测试,新的测试结果显示:
time used on Array is: 35
time used on String is: 57
Run Code Online (Sandbox Code Playgroud)
因此,Array对indexOf比String更有效.这个新的测试基本上创造了最坏的情况 - 针在String或Array的最后.
编辑:
如果indexOf …
我有一个array包含多个相同值的数据
["test234", "test9495", "test234", "test93992", "test234"]
Run Code Online (Sandbox Code Playgroud)
在这里,我想得到test234数组中每个的索引
为此,我尝试了Array.prototype.indexOf()方法.但它只会让我0回归,但我希望它能归还给我[0, 2, 4].
我怎样才能做到这一点?
var array = ["test234", "test9495", "test234", "test93992", "test234"];
document.write(array.indexOf("test234"));Run Code Online (Sandbox Code Playgroud)
我一直Array.indexOf在谷歌Chrome控制台中使用,我尝试了这些代码
[1,2,3].indexOf(3);
[1,2,"3"].indexOf("3");
Run Code Online (Sandbox Code Playgroud)
他们都返回了2,但是当我尝试这些代码时
[1,2,"3"].indexOf(3);
[1,2,3].indexOf("3");
Run Code Online (Sandbox Code Playgroud)
他们都返回-1.我想要它也返回2,我怎么能这样做?感谢您的帮助,时间和精力!
我只是javaScript的初学者,拥有python的背景.我正在尝试这个练习来检查string2的每个字符是否都包含在string1中.例如,如果STRING1是"你好",我会回来true,如果字符串2是"列城"的false,如果字符串2为"低".
我提出的是这个:
function mutation(arr) {
var set = new Set(string1.split(''));
for (var i = 0; i < string2.length; i++)
if (!set.has(string2[i]))
return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
我还可以去转换字符串2为一组,然后就采取即操作的差异set(string2) - set(string1),这将取我的一组是包含字符串,但不是在字符串1个字符,但我读创建一组是昂贵的,所以我没有去先.
我检查了其他解决方案,每个人都在使用string1.indexOf(letter)方法来检查string2中的每个字母是否都在string1中.
我想知道什么时候应该使用一组差异.为什么每个人都在使用array.indexOf()花费O(n)而不是set.has()O(1)的方法的方法.如果我正在使用,是否有任何陷阱set.has().(说浏览器兼容性)?
任何建议都有帮助.
在Swift 5之前,我已经使用了该扩展程序:
fileprivate extension String {
func indexOf(char: Character) -> Int? {
return firstIndex(of: char)?.encodedOffset
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我收到了不赞成使用的消息:
'encodedOffset' is deprecated: encodedOffset has been deprecated as most common usage is incorrect. Use `utf16Offset(in:)` to achieve the same behavior.
Run Code Online (Sandbox Code Playgroud)
有没有一个更简单的解决方案,而不是使用 utf16Offset(in:)?
我只需要作为Int传递回的字符位置的索引。
indexof ×10
javascript ×5
string ×5
arrays ×3
c# ×2
combobox ×1
dictionary ×1
digits ×1
enumeration ×1
java ×1
linq ×1
linq-to-sql ×1
regex ×1
set ×1
substring ×1
swift ×1
swift5 ×1
types ×1
vb.net ×1