2016-04-29 51 views
0

省略某些字符这是我的字符串提取一字符串中的java

1 AP(PEAR + ANC)E(CAN anag)

14 CS(T)ICE(内测anag)

15 CHIC(“酋长”坎)

,该字符串具有隐藏的答案, 第一个字符串有一个答案的外观和第二串具有吸引 我必须从字符串单独提取这些特定的答案。 我试图通过

String input = "AP(PEAR + ANC)E (CAN anag)";; 
String output = input.substring(0, input.indexOf(' ')); 
System.out.println(output); 

输出从中提取这些词:

AP(PEAR

正如你可以看到,存在为R之后的空间,从而所述子串停止在那里,因此但是有没有什么办法可以读到字符'E'(即字符串'APPEARANC E'的结尾)?如果下一个字符是'(()'),我想停止阅读,如果有空格 '。

我有在同一程序中另一种类型的字符串的 “EN(T)ICE(内测anag)”

String input = "EN(T)ICE (NIECE anag)"; 
String output = input.substring(0, input.indexOf(' ')); 
System.out.println(output); 

输出:

EN(T)ICE

有一个空间之后字符'E',因此它成功地提供了完整的输出。有没有办法像第一个字符串那样得到这样的输出。 ?任何帮助将是伟大的!

+3

所以'input.indexOf(“(”)'应该这样做。 – Berger

+0

如何对此输入字符串应用相同的内容? String input =“CHIC(”SHEIK“hom)”; @Berger – Anusha

回答

1

你可以试试这个拆分对" ("指数字符串:

String input1 = "EN(T)ICE (NIECE anag)"; 
String input2 = "AP(PEAR + ANC)E (CAN anag)"; 
String input3 = "CHIC (\"SHEIK\" hom)"; 

System.out.println(extract(input1)); 
System.out.println(extract(input2)); 
System.out.println(extract(input3)); 

public static String extract(String s){ 
    return s.split(" \\(.*")[0] 
      .replace("(", "") 
      .replace(")", "") 
      .replace(" + ", ""); 
} 

会产生:

ENTICE

外观

CHIC

+0

有什么方法可以让我用数字得到“1 APPEARANCE”?即。如果输入是“22 TIRES(2 defs)”,那么如果我使用String num = a.replaceAll(“\\ D”,“”)从其中单独提取数字,则输出为“222”,但我只需要22而不是支架后的任何数字? @Guillaume – Anusha

3

使用replaceAll而不是indexOfsubstring

String[] inputs = { 
    "AP(PEAR + ANC)E (CAN anag)", 
    "EN(T)ICE (NIECE anag)", 
    "CHIC (\"SHEIK\" hom)"}; 
for (String s : inputs) { 
    String output = s.replaceAll(" \\(.*|[()+\\s]", ""); 
    System.out.println(output); 
} 

结果:

APPEARANCE 
ENTICE 
CHIC 
+0

如何为字符串“CHIC(”SHEIK“hom)”? @ saka1029 – Anusha

+0

棒极了!工程就像一个魅力@ saka1029 – Anusha

+0

但我不应该为字符串CHIC(“SHEIK”hom)添加\。由于字符串是动态的@ saka1029 – Anusha

1

拆分的 “(”

像这样:

String input = "AP(PEAR + ANC)E (CAN anag)"; 
System.out.println(input.split(" \\(.*")[0]); 

只是用新值替换字符串输入!

1

你就不能更换" + "什么也没有,然后" "(空间)分割?

事情是这样的:

private static String convertInputToOutput(final String input) { 
    String[] splittedArray = input.replaceAll(" \\+ ", "").split(" "); 
    return splittedArray[0]; 
} 

public static void main(final String[] args) { 
    System.out.println(convertInputToOutput("AP(PEAR + ANC)E (CAN anag)")); 
    System.out.println(convertInputToOutput("EN(T)ICE (NIECE anag)")); 
    System.out.println(convertInputToOutput("CHIC (\"SHEIK\" hom)")); 
} 

输出:

AP(PEARANC)E 
EN(T)ICE 
CHIC 

如果不想括号输出,还使用了括号一个replaceAll

private static String convertInputToOutput(final String input) { 
    String[] splittedArray = input.replaceAll(" \\+ ", "").split(" "); 
    return splittedArray[0].replaceAll("(", "").replaceAll(")", ""); 
} 

输出:

APPEARANCE 
ENTICE 
CHIC 
+0

但我不应该添加\的字符串CHIC(“酋长“hom)。由于字符串是动态的@Kevin Cruijssen – Anusha

+0

@Anusha不知道你的意思。该\在字符串'“CHIC(\”酋长\”坎)‘'被用来逃避'’'-signs。我只是使用这些硬编码的例子来完成可测试的代码,如果你从某个地方(如文件)读取,你可以将_dynamic_ String传递给'convertInputToOutput'方法。 –