我如何String.StartsWith
在JavaScript中编写等效的C#?
var haystack = 'hello world';
var needle = 'he';
haystack.startsWith(needle) == true
Run Code Online (Sandbox Code Playgroud)
注意:这是一个老问题,正如评论中指出的ECMAScript 2015(ES6)引入了该.startsWith
方法.但是,在撰写此更新时(2015年),浏览器支持还远未完成.
如何在C++中实现以下(Python伪代码)?
if argv[1].startswith('--foo='):
foo_value = int(argv[1][len('--foo='):])
Run Code Online (Sandbox Code Playgroud)
(例如,如果argv[1]
是--foo=98
,则foo_value
是98
.)
更新:我对调查Boost犹豫不决,因为我只是想对一个简单的小命令行工具进行一个非常小的改动(我宁愿不必学习如何链接并使用Boost作为一个小的更改).
如果一个字符串在Ruby(没有rails)中以另一个字符串开头的最佳方法是什么?
startsWith(str_a, str_b)
标准C库中有类似的东西吗?
它应该指向两个以nullbytes结尾的字符串,并告诉我第一个字符串是否也完全出现在第二个字符串的开头.
例子:
"abc", "abcdef" -> true
"abcdef", "abc" -> false
"abd", "abdcef" -> true
"abc", "abc" -> true
Run Code Online (Sandbox Code Playgroud) 正在寻找名称以某些子字符串开头的预测变量,找不到任何类似的函数.
令人惊讶的是,我发现startswith
速度比in
:
In [10]: s="ABCD"*10
In [11]: %timeit s.startswith("XYZ")
1000000 loops, best of 3: 307 ns per loop
In [12]: %timeit "XYZ" in s
10000000 loops, best of 3: 81.7 ns per loop
Run Code Online (Sandbox Code Playgroud)
众所周知,in
操作需要搜索整个字符串,startswith
只需要检查前几个字符,所以startswith
应该更有效率.
什么时候s
足够大,startswith
速度更快:
In [13]: s="ABCD"*200
In [14]: %timeit s.startswith("XYZ")
1000000 loops, best of 3: 306 ns per loop
In [15]: %timeit "XYZ" in s
1000000 loops, best of 3: 666 ns per loop
Run Code Online (Sandbox Code Playgroud)
所以看起来调用 …
我制定一个正则表达式来检查,如果一个单词开头http://
或https://
或者ftp://
,我的代码如下,
public static void main(String[] args) {
try{
String test = "http://yahoo.com";
System.out.println(test.matches("^(http|https|ftp)://"));
} finally{
}
}
Run Code Online (Sandbox Code Playgroud)
它打印false
.我还检查了在Regex上发布的stackoverflow,以测试字符串是否以http://或https://开头
正则表达式似乎是正确的,但为什么它不匹配?我甚至尝试^(http|https|ftp)\://
和^(http|https|ftp)\\://
为什么执行startwith
比切片慢?
In [1]: x = 'foobar'
In [2]: y = 'foo'
In [3]: %timeit x.startswith(y)
1000000 loops, best of 3: 321 ns per loop
In [4]: %timeit x[:3] == y
10000000 loops, best of 3: 164 ns per loop
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,即使包括计算长度,切片仍然显得更快:
In [5]: %timeit x[:len(y)] == y
1000000 loops, best of 3: 251 ns per loop
Run Code Online (Sandbox Code Playgroud)
注意:此行为的第一部分在Python for Data Analysis(第3章)中有说明,但没有提供解释.
.
如果有用:这是C代码startswith
; 这是输出dis.dis
:
In [6]: import dis
In [7]: dis_it = lambda …
Run Code Online (Sandbox Code Playgroud) 以下是我如何检查是否mystring
以某个字符串开头:
>>> mystring.lower().startswith("he")
True
Run Code Online (Sandbox Code Playgroud)
问题是mystring
很长(数千个字符),所以lower()
操作需要很多时间.
问题:有更有效的方法吗?
我不成功的尝试:
>>> import re;
>>> mystring.startswith("he", re.I)
False
Run Code Online (Sandbox Code Playgroud) startswith ×10
string ×6
python ×4
java ×2
c ×1
c# ×1
c++ ×1
comparison ×1
cpython ×1
ends-with ×1
javascript ×1
parsing ×1
performance ×1
python-2.7 ×1
r ×1
regex ×1
ruby ×1
substring ×1