2016-11-14 66 views
-2

请完整解决方案!从括号中获取子串JAVA

鉴于包含一对括号的字符串,计算递归制成仅括号及其 内容的一个新的字符串,所以“XYZ(ABC)123”产率“(ABC)” 。

parenBit( “XYZ(ABC)123”)→ “(ABC)”

parenBit( “×(你好)”)→ “(你好)”

parenBit(“(XY )1" )→ “(XY)”

我的解决方案不起作用

public String parenBit(String str) { 
     char c; 
     int start = 0; 
     int end = 0; 
     for(int i=0; i < str.length(); i++){ 
      c = str.charAt(i); 
      if(c == '('){ 
       start = i; 

      } if(c == '('){ 
       end = i; 
       return str.substring(start, end); 
      } 

     } 

return "andrew"; 
} 

它不打印出任何东西。为什么?

+0

是否应'第二个if(C ==“)”)' – AhmadWabbi

+1

赋值说,你必须写一个递归* *方法来做到这一点。您的解决方案不使用递归(=方法应该调用它自己)。 – Jesper

+0

您的解决方案返回第一次出现''(''为空字符串。 修复:更改'} if(c =='('){'to'} else if(c ==')'){' – krzydyn

回答

0

我认为你在第二个条件中有一个错字。你检查(不)

0
public static String parenBit(String str) { 
    char c; 
    int start = 0; 
    int end = 0; 
    for(int i=0; i < str.length(); i++){ 
     c = str.charAt(i); 
     if(c == '('){ 
      start = i; 

     } if(c == ')'){ 
      end = i; 
      return str.substring(start + 1, end); 
     } 

    } 

    return ""; 
} 

说明变化:

第一,第二,如果更改为if (c == ')')检查一个右括号。其次,start变量是关闭的,所以我加了1。最后,如果没有找到括号,我认为你不应该返回andrew。所以我改变它返回一个空字符串。