课本上的题:
1.编写一个方法,返回两个字符串共有的前缀。我的代码如下。。。。
import java.util.Scanner;
public class exercise9_28 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
System.out.print("Please input two strings:");
String string1=input.nextLine();
String string2=input.nextLine();
System.out.print(prefix(string1,string2));
}
public static String prefix(String s1,String s2){
char[] storage = new char[100];
for(int i=0;i<(s1.length()<=s2.length()?s1.length():s2.length());i++){
if(s1.charAt(i) == s2.charAt(i))
storage[i] = s1.charAt(i);
else
break;
}
return String.valueOf(storage[100]);
}
}
我运行的时候会出现Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException的错误。。
我把return String.valueOf(storage[100])那里的100改成99后就不会出现错误。。但却只输出了一个框框的符号。。
求大神解释啊。。。。。
2.
我的代码如下:
import java.util.Scanner;
public class exercise9_35 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input =new Scanner(System.in);
System.out.print("Enter a genome string: ");
String v=input.nextLine();
findGene(v);
}
public static void findGene(String s){
for(int i=0;i<s.length()-8;i++){
String s1 = s.substring(i,i+3);
if(s1 == "ATG")
while(s.substring(i+3, i+6)!="TAG"||s.substring(i+3, i+6)!="TAA"||s.substring(i+3, i+6)!="TGA"){
System.out.print(s.charAt(i+3));
i++;
}
System.out.println();
}
}
}
输入了一串字符之后,什么输出也没有。。。。怎么回事啊。。。
------解决思路----------------------
第二题基因题
//package net.csdn.question;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class GetGene{
public static void main(String[] args){
String[] geneArray = getGeneArray();
printGeneArray(geneArray);
}
private static String[] getGeneArray(){
System.out.println("please input the gene data:(just content \"A/C/T/G\"start with \"ATG\",end with \"TAG\" or \"TAA\" or \"TGA\")");
Scanner input = new Scanner(System.in);
String content = input.nextLine();
String[] geneArray = null;
String geneStr = "";
//以下进行有效性判断.
//条件1.必须以ATG开始
//条件2.仅包含A C T G四个字母组合
//条件3.不包含ATG
//条件4.以TAG或者TAA或TGA结尾
//条件5.有效的基因组必须是包含三个字母
String regex = "ATG(((A(?!TG)
------解决思路----------------------
T(?!(AG
------解决思路----------------------
AA
------解决思路----------------------
GA))
------解决思路----------------------
C
------解决思路----------------------
G){3})+)(TAG
------解决思路----------------------
TAA
------解决思路----------------------
TGA)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(content);
if(matcher.find()){
geneStr += matcher.group(1);
}else{
System.err.println("No gene is found!");
System.exit(1);
}
//后续可能还包含其他的基因组.
while(matcher.find()){
geneStr += matcher.group(1);
}
geneArray = new String[geneStr.length()/3];
regex = "[ACTG]{3}";
pattern = Pattern.compile(regex);
matcher = pattern.matcher(geneStr);
int index = 0;
while(matcher.find()){
geneArray[index++] = matcher.group();
}
return geneArray;
}
private static void printGeneArray(String[] geneArray){
System.out.println("Total get " + geneArray.length + " genes.");
for(int i = 0 ; i < geneArray.length ; i ++){
System.out.println(geneArray[i]);
}
}
}
------解决思路----------------------
第一个程序
return String.valueOf(storage[100]);
括号里改成storage
原程序只把storage[100]这一个变量转化为String类型返回
另外建议加上两字符串没有相同字符时的返回
------解决思路----------------------
感觉楼主最近在做的练习题应该都是针对正则表达式的
第一题.求公共最长前缀.
package net.csdn.question;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.Scanner;
public class GetSamePrefix {
public static void main(String[] args) {
String separator = "";// 植入自定义分隔符,减少用于输入特例造成程序出现错误的特例.分隔符不能包含对正则有特殊含义的字符
String content = getContent(separator);
String prefix = getPrefix(content, separator);
System.out.println("The same prefix is:\"" + prefix + "\"");
}
private static String getPrefix(String content, String separator) {
String regex = "^(.*).*" + separator + "\\1";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(content);
String result = null;
if (matcher.find()) {
result = matcher.group(1);
}
return result;
}
private static String getContent(String separator) {
Scanner input = new Scanner(System.in);
System.out.println("Please input String s1:");
String s1 = input.nextLine();
System.out.println("Please input String s2:");
String s2 = input.nextLine();
String content = s1 + separator + s2;
input.close();
return content;
}
}
------解决思路----------------------
昨天修改了一下楼主的代码,可惜受发帖次数限制,无法发帖。
注意字符串相等不能使用==,而要使用equals()方法。
import java.util.Scanner;
public class H {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
System.out.print("Enter a genome string: ");
String v = input.nextLine();
findGene(v);
}
public static void findGene(String s) {
for (int i = 0; i < s.length() - 8; i++) {
String t = s.substring(i, i + 3);
if (t.equals("ATG")) {
while (!((t= s.substring(i + 3, i + 6)).equals("TAG")
------解决思路----------------------
t.equals("TAA")
------解决思路----------------------
t.equals("TGA"))) {
System.out.print(s.charAt(i + 3));
i++;
}
System.out.println();
}
}
}
}
运行结果:
Enter a genome string: TTATGTTTTAAGGATGGGGCGTTAGTT
TTT
GGGCGT