我NSString从服务器收到了一个.现在我想把它拆分成我需要的子串.如何拆分字符串?
例如:
substring1:从第二个字符读取到第5个字符
substring2:从第6个字符读取10个字符.
如何忽略字符串的前10个字符?
输入:
str = "hello world!";
Run Code Online (Sandbox Code Playgroud)
输出:
d!
Run Code Online (Sandbox Code Playgroud) 我怎么能用C++中的另一个子字符串替换字符串中的子字符串,我可以使用哪些函数?
eg: string test = "abc def abc def";
test.replace("abc", "hij").replace("def", "klm"); //replace occurrence of abc and def with other substring
Run Code Online (Sandbox Code Playgroud) 假设我有一个表列,其结果如下:
ABC_blahblahblah
DEFGH_moreblahblahblah
IJKLMNOP_moremoremoremore
Run Code Online (Sandbox Code Playgroud)
我希望能够编写一个从所述表中选择此列的查询,但只返回子字符串直到Underscore(_)字符.例如:
ABC
DEFGH
IJKLMNOP
Run Code Online (Sandbox Code Playgroud)
SUBSTRING函数似乎不适合任务,因为它是基于位置的,并且下划线的位置不同.
我想到了TRIM功能(特别是RTRIM功能):
SELECT RTRIM('listofchars' FROM somecolumn)
FROM sometable
Run Code Online (Sandbox Code Playgroud)
但是我不确定我是如何让它工作的,因为它似乎只删除了某个列表/一组字符,而我实际上只是在导致Underscore字符的字符之后.
String#substring()Java中方法的时间复杂度是多少?
检查字符串x是否为子串的Pythonic方法y是:
if x in y:
Run Code Online (Sandbox Code Playgroud)
如果找到x就相当于a,b,c,d,e,f或g也是Python的:
if x in [a,b,c,d,e,f,g]:
Run Code Online (Sandbox Code Playgroud)
但是,如果检查一些字符串x包含两种a,b,c,d,e,f或g看起来笨重:
if a in x or b in x or c in x or d in x or e in x or f in x or g in x
Run Code Online (Sandbox Code Playgroud)
是否有更多Pythonic方法检查字符串是否x包含列表元素? …
如何检查字符串是否是Go中另一个字符串的子字符串?例如,我想检查一下someString.contains("something").
介绍
我有一个我最喜欢的算法,我在很久以前就已经制作了这种算法,我总是用新的编程语言,平台等作为某种基准来编写和重写.虽然我的主要编程语言是C#,但我只是简单地复制粘贴代码并稍微改变了语法,用Java构建它并发现它运行速度提高了1000倍.
代码
有相当多的代码,但我只是提出这个似乎是主要问题的代码片段:
for (int i = 0; i <= s1.Length; i++)
{
for (int j = i + 1; j <= s1.Length - i; j++)
{
string _s1 = s1.Substring(i, j);
if (tree.hasLeaf(_s1))
...
Run Code Online (Sandbox Code Playgroud)
数据
重要的是要指出此特定测试中的字符串s1的长度为1百万字符(1MB).
测量
我在Visual Studio中描述了我的代码执行,因为我认为构建树的方式或者我遍历它的方式并不是最佳的.在检查结果后,看起来该线路string _s1 = s1.Substring(i, j);可以容纳超过90%的执行时间!
补充意见
我注意到的另一个不同之处在于,尽管我的代码是单线程的,Java使用所有8个内核(100%CPU利用率)来管理它,而即使使用Parallel.For()和多线程技术,我的C#代码也设法使用35-最多40%.由于算法与核心数(和频率)成线性比例,我已经对此进行了补偿,但Java中的片段仍然执行速度快100-1000倍.
推理
我认为发生这种情况的原因与C#中的字符串是不可变的这一事实有关,因此String.Substring()必须创建一个副本,因为它在嵌套的for循环中有很多次迭代我假设有很多复制和垃圾收集正在进行,但是,我不知道如何在Java中实现Substring.
题
此时我有什么选择?子串的数量和长度没有办法(这已经最大化了).是否有一种我不知道的方法(或许可能是数据结构)可以为我解决这个问题?
请求最小化实施(来自评论)
我遗漏了后缀树的实现,它在构造中是O(n),在遍历中是O(log(n))
public static double compute(string s1, string s2)
{
double score = 0.00;
suffixTree stree = new suffixTree(s2);
for (int i = 0; i <= s1.Length; …Run Code Online (Sandbox Code Playgroud) 我有一个我想改进的批处理文件.如果在末尾有斜杠,我可以轻松地从路径中删除最后一个字符,而不是要求用户提供没有尾部斜杠的文件夹路径吗?
:START
@echo What folder do you want to process? (Provide a path without a closing backslash)
set /p datapath=
::Is string empty?
IF X%datapath% == X GOTO:START
::Does string have a trailing slash?
IF %datapath:~-1%==\ GOTO:START
Run Code Online (Sandbox Code Playgroud) 为什么不'example'[999:9999]导致错误?既然'example'[9]做,什么是其背后的动机是什么?
从这种行为我可以假设'example'[3],基本上/内部,不一样'example'[3:4],即使两者都产生相同的'm'字符串.
substring ×10
string ×4
c# ×2
python ×2
.net ×1
asp.net ×1
batch-file ×1
c++ ×1
go ×1
if-statement ×1
ios ×1
iphone ×1
java ×1
objective-c ×1
oracle ×1
performance ×1
python-3.x ×1
replace ×1
sql ×1
trim ×1