【问题标题】:I need to use substring, but I need the second parameter to be inclusive我需要使用子字符串,但我需要第二个参数是包容性的
【发布时间】:2013-11-14 18:36:45
【问题描述】:

我有一个字符串,我需要循环并创建每个可能的子字符串。例如,如果我有“HelloWorld”,“rld”应该是其中一种可能性。 String方法,substring(int i, int k)不包含k,所以如果

|H|e|l|l|o|W|o|r|l|d|
 0 1 2 3 4 5 6 7 8 9

然后

substring(7,9) 返回“rl”

我将如何解决这个问题并让它在包容性方面发挥作用?我理解为什么子字符串不应该等于创建它的字符串,但在这种情况下,这对我很有帮助。

来自 Codingbat 的示例:http://codingbat.com/prob/p137918

我能想到的:

public String parenBit(String str) {
  String sub;
  if (str.charAt(0) == '(' && str.charAt(str.length() - 1) == ')')
    return str;
  for (int i = 0; i < str.length() - 1; i++) {
    for (int k = i + 1; k < str.length(); k++) {
      sub = str.substring(i,k);

    }
  }
  return null;
}

【问题讨论】:

  • 你考虑过加1吗?
  • 旁注:你为什么返回null
  • substring(7,10) 换句话说就是确保 k = str.length 的最大值为 k
  • 啊。阅读 CodingBat 页面,我认为您有两个误解。首先,您的解决方案不是递归的。其次,它不是解决所提出问题的方法,它不是生成所有可能的子字符串 - 而是找到 '(' 和 )' [包括括号] 之间的子字符串。
  • I understand why a substring shouldn't be able to equal the String it was created from 为什么?我会称“helloworld”为“helloworld”的子字符串。我通常也会将 A 称为 A 的子集(只要我们不是在谈论真子集)

标签: java string substring


【解决方案1】:

当您使用整数时,从独占到包容之间的转换很简单。您只需添加 1。

String substringInclusive(String s, int a, int b)
{
    return s.substring(a, b+1);
}

【讨论】:

  • OH MAN !! Jon Skeet 已经在 32 分钟前回答了你。
  • @iShaalan 如果它是正确的答案,那么它就是正确的答案。无论如何,这个问题需要一个答案。
【解决方案2】:

正如 Jon Skeet 正确指出的那样,加 1 是正确的做法,因为 String.substring 中的第二个参数不包含在内。

但是您的答案不是递归的,以下是递归解决方案:

public String parenBit(String str) {
    if(str.charAt(0)!='(')
      return parenBit(str.substring(1));

    if(str.charAt(0)=='('&&(str.charAt(str.length()-1)!=')'))
      return parenBit(str.substring(0, str.length()-1));
   return str;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    • 2021-12-20
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多