java编程问题,高手来..

一开始DNA为空,令用户通过scanner输入一串只包含a,t,c,g四个字母的DNA片段(若输入中有其他字母则输出“无效片段”)。将用户输入的DNA与之前的DNA相结合... 一开始DNA为空,令用户通过scanner输入一串只包含a,t,c,g四个字母的DNA片段(若输入中有其他字母则输出“无效片段”)。将用户输入的DNA与之前的DNA相结合并输出(去掉此片段开头处与之前DNA结尾处的重叠部分),此过程可一直循环(假设用户输入的每一段DNA都与之前片段有重叠部分),只到用户输入值为空时终止程序。如何写程序实现以上过程?

例:
初始DNA:“”
用户输入:“atatatata”
输出结果:“atatatata”
用户输入:“atacatga”
输出结果:“atatatatacatga”
用户输入:“tgacatag”
输出结果:“atatatatacatgacatag”
用户输入:“”
输出结果:“atatatatacatgacatag”,程序中止。
展开
 我来答
百度网友afe836d
2017-02-16 · TA获得超过635个赞
知道小有建树答主
回答量:367
采纳率:50%
帮助的人:300万
展开全部

根据您的需求,简单写了个小程序,看是否能满足您的诉求:

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class DNA {

    public static void main(String[] args) {
        String dnaRegex = "^[a|t|c|g]{1,}$";
        // 编译正则表达式,第二个参数为是否区分大小写
        Pattern pattern = Pattern.compile(dnaRegex/*,Pattern.CASE_INSENSITIVE*/);
        Scanner scanner = null;
        try {
            scanner = new Scanner(System.in);
            StringBuilder builder = new StringBuilder();
            System.out.println("请输入DNA片段字符串,字符串只能包含a,t,c,g四个字母");
            while (true) {
                String line = scanner.nextLine();
                //输入为空,不管输入多少个空格,都认为输入空,退出输入
                if (line == null || line.trim().length() == 0) {
                    System.out.println(builder.toString());
                    break;
                }
                Matcher matcher = pattern.matcher(line);
                //输入的DNA片段不是只包含a,t,c,g四个字母
                if (!matcher.matches()) {
                    System.out.println("无效片段,请重新输入。");
                    continue;
                }
                builder.append(line);
                System.out.println(builder.toString());
            }
        }catch (Exception e){
            System.out.println("发生异常,终止程序!");
        }finally {
            if (scanner != null){
                scanner.close();
            }
        }
    }

}
暮影1994
2017-02-16 · TA获得超过2338个赞
知道大有可为答主
回答量:1215
采纳率:60%
帮助的人:382万
展开全部

import java.util.Scanner;

/**
 * 2017/02/16 15:39
 *
 * @author 3306 TODO
 */
public class TestDNA {

    public static void main(String[] args) {
        String wholeDNA = "";

        while (true) {

            String dna = inputDNASegment();
            if (isEmpty(dna)) {
                break;
            }

            if (isLegal(dna)) {
                String origin = wholeDNA;
                wholeDNA = appendDNA(origin, dna);
                System.out.println("输出结果: " + wholeDNA);
            } else {
                System.out.println("无效片段");
            }
        }

        System.out.println("输出结果: " + wholeDNA);
    }

    /**
     * 输入dna片段
     *
     * @return String
     */
    private static String inputDNASegment() {

        Scanner input = new Scanner(System.in);

        System.out.print("请输入DNA片段: ");


        return input.next();
    }

    /**
     * 判断dna片段是否合法
     *
     * @param dna dna字符串
     * @return boolean 合法返回true,否则返回false
     */
    private static boolean isLegal(String dna) {
        for (char ch : dna.toCharArray()) {
            if (ch != 'a' && ch != 't' && ch != 'c' && ch != 'g') {
                return false;
            }
        }

        return true;
    }

    /**
     * 拼装DNA
     *
     * @param origin    源dna数据
     * @param appendVal 新增dna数据
     * @return String
     */
    private static String appendDNA(String origin, String appendVal) {

        int subIndex = 0;


        for (int index = 0, len = appendVal.length(); index < len; index++) {
            String temp = appendVal.substring(0, len - index);

            if (-1 != origin.lastIndexOf(temp)) {
                subIndex = temp.length();
                break;
            }
        }

        return origin + appendVal.substring(subIndex);
    }

    /**
     * 是否为空
     *
     * @param dna dna字符串
     * @return boolean
     */
    private static boolean isEmpty(String dna) {
        return (null == dna || "\"\"".equals(dna.trim()));
    }
}
追问
感谢帮助!
测试时发现若输入为空,程序仍然要求继续输入,而此时本应终止并输出最终得出的DNA片段,是否哪里出了点问题呢?
追答
我还以为是输入:   "" 就结束   你可以输进""结束程序的
如果您要进行回车就结束的话:

请修改:

/**
* 输入dna片段
*
* @return String
*/
private static String inputDNASegment() {

Scanner input = new Scanner(System.in);

System.out.print("请输入DNA片段: ");

return input.nextLine(); -->这里改为nextLine();
}
/**
* 是否为空
*
* @param dna dna字符串
* @return boolean
*/
private static boolean isEmpty(String dna) {
return (null == dna || "".equals(dna.trim())); -->这里修改
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式