标签: substring

为什么'substring(startIndex,endIndex)'不会抛出"超出范围"

在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)

java substring

18
推荐指数
2
解决办法
7万
查看次数

是否有已知的O(nm)-time/O(1)空间算法用于POSIX文件名匹配(fnmatch)?

编辑: 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

c regex string substring pattern-matching

18
推荐指数
1
解决办法
448
查看次数

sub和gsub函数?

我有这个命令:

$ 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)

awk substring r

18
推荐指数
1
解决办法
10万
查看次数

C++如何获得字符后的子字符串?

例如,如果我有

string x = "dog:cat";
Run Code Online (Sandbox Code Playgroud)

我想在":"之后提取所有内容,并返回cat.这样做的方法是什么?

c++ string substring

18
推荐指数
4
解决办法
5万
查看次数

屏蔽除字符串的前6位和后4位以外的所有数字(长度各不相同)

我有一个卡号作为字符串,例如:

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)

.net c# string substring masking

18
推荐指数
1
解决办法
3万
查看次数

在Rust中有像JavaScript的substr这样的方法吗?

我查看了Rust 文档,String但是我找不到提取子字符串的方法.

substr在Rust中有像JavaScript这样的方法吗?如果没有,你会如何实现它?

str.substr(start[, length])
Run Code Online (Sandbox Code Playgroud)

最接近的可能是slice_unchecked但它使用字节偏移而不是字符索引并标记unsafe.

string substring rust

18
推荐指数
4
解决办法
8456
查看次数

Jinja2模板中的子串

使用ansible进行部署时,我需要删除一个尾随-p子字符串的特定情况.

该字符串somemachine-prod-p应该成为somemachine-prod只有在-p很底.

我看到我可以使用Jinja的子串函数不能满足我的需要,因为我需要去除字符串的结尾,而不是开头.

想法?

substring jinja2 ansible

18
推荐指数
3
解决办法
3万
查看次数

如何在C#中只获取字符串的前十个字符

我有一个字符串,我需要得到前十个字符.有没有办法让我轻松做到这一点.

我希望有人能告诉我.

c# substring

17
推荐指数
4
解决办法
6万
查看次数

字符串截断长度,但不允许切断单词

我想在一定长度上限制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中是否可以在一个简单的语句中.

mysql sql substring

17
推荐指数
2
解决办法
2万
查看次数

Python:在字符串列表中优化搜索子字符串

我有一个特殊的问题,我想在许多字符串列表中搜索许多子字符串.以下是我要做的事情的要点:

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()它将提供特定输入而不是寻找子输入).在内存中搜索列表是否相对较慢?

python substring string-matching

17
推荐指数
2
解决办法
3594
查看次数

标签 统计

substring ×10

string ×4

c# ×2

.net ×1

ansible ×1

awk ×1

c ×1

c++ ×1

java ×1

jinja2 ×1

masking ×1

mysql ×1

pattern-matching ×1

python ×1

r ×1

regex ×1

rust ×1

sql ×1

string-matching ×1