在Java中我使用的substring()方法,我不知道为什么它不会抛出"out of index"错误.
该字符串的abcde索引从0开始到4,但该substring()方法将startIndex和endIndex作为参数,基于我可以调用foo.substring(0)并获取"abcde"的事实.
那么为什么子串(5)有效呢?该指数应该超出范围.解释是什么?
/*
1234
abcde
*/
String foo = "abcde";
System.out.println(foo.substring(0));
System.out.println(foo.substring(1));
System.out.println(foo.substring(2));
System.out.println(foo.substring(3));
System.out.println(foo.substring(4));
System.out.println(foo.substring(5));
Run Code Online (Sandbox Code Playgroud)
此代码输出:
abcde
bcde
cde
de
e
//foo.substring(5) output nothing here, isn't this out of range?
Run Code Online (Sandbox Code Playgroud)
当我用6替换5时:
foo.substring(6)
Run Code Online (Sandbox Code Playgroud)
然后我得到错误:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException:
String index out of range: -1
Run Code Online (Sandbox Code Playgroud) 编辑: WHOOPS!很大的承认,我搞砸了?in fnmatchpattern语法的定义,似乎已经提出(并且可能已经解决)一个更难的问题,就像它.?在正则表达式中一样.当然,它实际上应该像.正则表达式一样(恰好匹配一个字符,而不是零或一个).这反过来意味着我最初的减少问题的工作足以解决(现在相当无聊)原始问题.解决更难的问题仍然很有趣; 我可能会在某个时候写出来.
从好的方面来说,这意味着像2way/SMOA针分解这样的东西可能适用于这些模式的可能性要大得多,这反过来又可以产生比原本更好的O(n)甚至O(n/m)性能.
在问题标题中,m设为模式/针n的长度,并且是与其匹配的字符串的长度.
这个问题对我很感兴趣,因为我看到/使用过的所有算法都有病态性能不佳和可能的堆栈溢出漏洞,这是由于回溯或需要动态内存分配(例如DFA方法或者只是避免在回调时进行回溯)如果某个程序fnmatch用于授予/拒绝某种访问权限,则会出现故障情况.
我愿意相信正则表达式匹配不存在这样的算法,但文件名模式语言比正则表达式简单得多.我已经将问题简化到可以假设模式不使用该*字符的程度,并且在这个修改过的问题中,您不匹配整个字符串,而是搜索字符串中模式的出现(如子字符串)匹配问题).如果你进一步简化语言并删除?字符,语言只是由固定字符串和括号表达式的连接组成,这很容易在O(mn)时间和O(1)空间中匹配,O(n)如果针分解,也许可以改进2way和SMOA子串搜索中使用的技术可以扩展到这种括号模式.然而,天真的每一个都?要求试验有或没有?消耗一个角色,带来时间因素在2^q哪里q是?模式中的字符数.
有人知道这个问题是否已经解决,或者有解决问题的想法?
注意:在定义O(1)空间时,我使用的是Transdichotomous_model.
注2:本网站详细介绍了我引用的2way和SMOA算法:http://www-igm.univ-mlv.fr/~lecroq/string/index.html
我有这个命令:
$ find $PWD -name "*.jpg" | awk '{system( "echo " $(sub(/\//, "_")) ) }'
_home/mol/Pulpit/test/1.jpg
Run Code Online (Sandbox Code Playgroud)
现在同样的事情,但使用gsub:
$ find $PWD -name "*.jpg" | awk '{system( "echo " $(gsub(/\//, "_")) ) }'
mol@mol:~
Run Code Online (Sandbox Code Playgroud)
我想得到结果:
_home_mol_Pulpit_test_1.jpg
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助.
编辑:
我把'echo'用来测试命令:
$ find $PWD -name "*.jpg" | awk '{gsub("/", "_")} {system( "echo " mv $0 " " $0) }'
_home_mol_Pulpit_test_1.jpg _home_pic_Pulpit_test_1.jpg
mol@mol:~
Run Code Online (Sandbox Code Playgroud)
我想得到结果:
$ find $PWD -name "*.jpg" | awk '{gsub("/", "_")} {system( "echo " mv $0 " " $0) }'
/home/pic/Pulpit/test/1.jpg _home_pic_Pulpit_test_1.jpg
Run Code Online (Sandbox Code Playgroud) 例如,如果我有
string x = "dog:cat";
Run Code Online (Sandbox Code Playgroud)
我想在":"之后提取所有内容,并返回cat.这样做的方法是什么?
我有一个卡号作为字符串,例如:
string ClsCommon.str_CardNumbe r = "3456123434561234";
Run Code Online (Sandbox Code Playgroud)
根据要求,此卡号的长度可以在16到19位之间变化.
我的要求是我必须显示卡号的前六位和后四位,并用字符"X"掩盖其中的其他字符.
我尝试过使用subString并分别为16,17,18,19位数实现它.
我将字符串(ClsCommon.str_CardNumber)拆分为5个字符串(str_cardNum1,str_cardNum2,str_cardNum3,str_cardNum4,str_cardNum5 - 每个字符串4位数.第5个字符串的剩余数字)
所有字符串都放在ClsCommon文件中.基于此我实现了以下,它完美地工作:
if (ClsCommon.str_CardNumber.Length == 16) {
txtmskcrdnum.Text = string.Concat(ClsCommon.str_cardNum1, " ", ClsCommon.str_cardNum2.Substring(0, 2), "XX", " ", "XXXX", " ", ClsCommon.str_cardNum4);
}
if (ClsCommon.str_CardNumber.Length == 17) {
txtmskcrdnum.Text = string.Concat(ClsCommon.str_cardNum1, " ", ClsCommon.str_cardNum2.Substring(0, 2), "XX", " ", "XXXX", " ", "X", ClsCommon.str_cardNum4.Substring(1, 3), " ", ClsCommon.str_cardNum5);
}
if (ClsCommon.str_CardNumber.Length == 18) {
txtmskcrdnum.Text = string.Concat(ClsCommon.str_cardNum1, " ", ClsCommon.str_cardNum2.Substring(0, 2), "XX", " ", "XXXX", " ", "XX", ClsCommon.str_cardNum4.Substring(2, 2), " …Run Code Online (Sandbox Code Playgroud) 我查看了Rust 文档,String但是我找不到提取子字符串的方法.
substr在Rust中有像JavaScript这样的方法吗?如果没有,你会如何实现它?
str.substr(start[, length])
Run Code Online (Sandbox Code Playgroud)
最接近的可能是slice_unchecked但它使用字节偏移而不是字符索引并标记unsafe.
使用ansible进行部署时,我需要删除一个尾随-p子字符串的特定情况.
该字符串somemachine-prod-p应该成为somemachine-prod只有在-p很底.
我看到我可以使用Jinja的子串函数不能满足我的需要,因为我需要去除字符串的结尾,而不是开头.
想法?
我想在一定长度上限制MYSQL中的字符串字段长度,但我不希望发生任何切断字.
当我做:
SELECT SUBSTRING('Business Analist met focus op wet- en regelgeving', 1, 28)
Run Code Online (Sandbox Code Playgroud)
我得到这个作为输出:
Business Analist met focus o
Run Code Online (Sandbox Code Playgroud)
但我想
Business Analist met focus
Run Code Online (Sandbox Code Playgroud)
如何强制限制28个字符,但是要防止切断单词?当然,在[插入所选择的编程语言]中很容易;-),但我想知道在MYSQL中是否可以在一个简单的语句中.
我有一个特殊的问题,我想在许多字符串列表中搜索许多子字符串.以下是我要做的事情的要点:
listStrings = [ACDE, CDDE, BPLL, ... ]
listSubstrings = [ACD, BPI, KLJ, ...]
Run Code Online (Sandbox Code Playgroud)
以上条目仅是示例.len(listStrings)是~60,000,len(listSubstrings)是~50,000-300,000,len(listStrings [i])是10到30,000.
我目前的Python尝试是:
for i in listSubstrings:
for j in listStrings:
if i in j:
w.write(i+j)
Run Code Online (Sandbox Code Playgroud)
或者沿着这些方向的东西.虽然这对我的任务起作用,但速度非常慢,使用一个核心并按照40分钟的顺序完成任务.有没有办法加快速度?
我不相信我可以用listStrings:listSubstrings制作一个dict,因为有可能需要在两端存储重复的条目(尽管我可以尝试这个,如果我能找到一种方法来附加一个唯一的标签每一个,因为dicts是如此快得多).同样,我认为我不能预先计算可能的子串.我甚至不知道搜索dict键是否比搜索列表更快(因为dict.get()它将提供特定输入而不是寻找子输入).在内存中搜索列表是否相对较慢?