Tag: 子串

有多少人被Java子串内存问题所困扰?

我最近发现java.lang.String.substring方法不返回一个新字符串,而是返回一个包含原始字符串的视图。 这可能会对记忆产生影响。 例如,如果您正在读取ascii文件,并使用子字符串解析文件中的标记并将子字符串的结果存储在内存中 – 您实际存储在内存中的是子字符串操作之前的整个字符串! 您当然可以通过在自己的版本中包装子字符串来解决此问题,该子字符串返回子字符串结果的新字符串。

查找字符串的子字符串包含数组中的所有单词

我有一个字符串和一个单词数组,我必须编写代码来查找字符串的所有子字符串,包含任何顺序的数组中的所有单词。 该字符串不包含任何特殊字符/数字,每个单词用空格分隔。 例如: 字符串给出: aaaa aaaa aaaa aaaa cccc bbbb bbbb bbbb bbbb aaaa bbbb cccc 数组中的单词: aaaa bbbb cccc 输出样本: aaaa aaaa aaaa aaaa cccc bbbb bbbb bbbb bbbb aaaa aaaa aaaa aaaa cccc bbbb aaaa cccc bbbb bbbb bbbb bbbb cccc bbbb bbbb bbbb bbbb aaaa aaaa cccc bbbb 我已经使用for循环实现了这个,但这是非常低效的。 我怎样才能更有效地做到这一点? 我的代码: for(int […]

找到DNA Java的超级序列

我正在努力使用“查找超级序列”算法。 输入用于字符串集 String A = “caagccacctacatca”; String B = “cgagccatccgtaaagttg”; String C = “agaacctgctaaatgctaga”; 结果将是正确对齐的字符串集(下一步应该是合并) String E = “ca ag cca cc ta cat ca”; String F = “c gag ccat ccgtaaa g tt g”; String G = ” aga acc tgc taaatgc ta ga”; 谢谢你的任何建议(我在这项任务上坐了一天以上) 合并后,超级字符串将是 cagagaccatgccgtaaatgcattacga “这种情况”中超级序列的定义就像是 当且仅当字符串R中的所有字符按照它们在输入序列R中出现的顺序存在于超序列S中时,字符串R包含在超序列S中。 我试过的“解决方案”(再次以错误的方式)是: public class Solution4 { […]

如何使用.substring方法从索引开始并在其后获取x个数字或字符?

所以我正在解析html,我正在尝试从某个位置开始创建一个子串,然后停止941个字符。 Java中的.substring方法的工作方式是你必须给它一个起始位置和一个结束位置,但结束位置需要在开始后是原始字符串上的一个位置。 String html = “This is a test string for example”; html.substring(html.indexOf(“test”), 6); 这是我希望代码如何工作的一个例子,它会使一个子字符串从test开始,并在7个字符返回“test string”后停止。 但是,如果我使用此代码,我会得到一个indexOutOfBoundsexception,因为6是在测试之前。 工作代码如下 String html = “This is a test string for example”; html.substring(html.indexOf(“test”), 22); 哪个会返回“测试字符串”。 但我不知道最后一个数字是什么,因为html总是在变化。 所以问题是我必须做些什么才能开始一个特定的位置并在它之后结束数量的字符? 任何帮助将非常感激! 谢谢!

为什么’substring(startIndex,endIndex)’没有抛出“超出范围”

在Java中我使用substring()方法,我不确定为什么它不会抛出“out of index”错误。 字符串abcde索引从0到4开始,但是substring()方法根据我可以调用foo.substring(0)并获取“abcde”的事实将startIndex和endIndex作为参数。 那么为什么子串(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)); 此代码输出: abcde bcde cde de e //foo.substring(5) output nothing here, isn’t this out of range? 当我用6替换5时: foo.substring(6) 然后我得到错误: Exception in thread “main” java.lang.StringIndexOutOfBoundsException: String index out of range: -1

如何使用树找到最长的常见子串?

根据wiki的最长公共子串问题可以使用后缀树来解决。 来自维基 : 可以通过为字符串构建一个通用后缀树,然后找到最深的内部节点来找到一组字符串中最长的公共子字符串,这些节点具有来自其下面子树中所有字符串的叶节点 我不懂。 示例:如果我有: ABCDE和XABCZ 那么后缀树是(由于空格而省略了XABCZ一些分支): 最长的公共子字符串是ABC但我不知道wiki的描述在这里有什么帮助。 ABC不是具有叶节点的最深的内部节点。 任何帮助,以了解这是如何工作的?

.NET与Java之间子串操作性能的比较

获取字符串的子字符串是一种非常常见的字符串操作操作,但我听说Java和.NET平台之间的性能/实现可能存在很大差异。 具体来说,我听说在Java中, java.lang.String为substring提供了常量时间操作,但在.NET中, System.String提供了线性性能Substring 。 这些真的是这样吗? 可以在文档/源代码等中确认吗? 此实现是特定的,还是由语言和/或平台指定的? 每种方法的优缺点是什么? 一个人从一个平台迁移到另一个平台应该寻求什么来避免陷入任何性能陷阱?

charAt()或子串? 哪个更快?

我想遍历String中的每个字符,并将String的每个字符作为String传递给另一个函数。 String s = “abcdefg”; for(int i = 0; i < s.length(); i++){ newFunction(s.substring(i, i+1));} 要么 String s = “abcdefg”; for(int i = 0; i < s.length(); i++){ newFunction(Character.toString(s.charAt(i)));} 最终结果必须是String。 那么任何更快或更高效的想法?

字符串索引超出范围exceptionjava

从我的类中调用函数时出现以下错误:java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1虽然我使用系统打印来查看我在substring()函数中传递的输入和所有内容似乎是对的。 函数isContained()返回一个布尔值,用于定义作为参数传递的子字符串是否在单词列表中。 我的代码是: for(int i=0; i<=size; i++) for(int j=i+1; j<=size; j++) if(isContained(str.substring(i,ji))) System.out.println(str.substring(i,ji)); 其中size是字符串(str)的大小我在函数中传递