首页 > 解决方案 > 列表不添加日期java

问题描述

我试图将我的值从一个列表分离到两个不同的列表。我的代码只是验证是否有带字母的数字。我正在这样做:

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

public class Programa {

    public static void main(String[] args) {
        Funcionarios valido = new Funcionarios();
        Funcionarios invalido = new Funcionarios();
        Funcionarios aux = new Funcionarios();
        List<String> aux_lista = new ArrayList<>();

        Scanner entrada = new Scanner(System.in);
        String nome, apelido, cpf, nascimento, cep, endereco, numero, cidade, estado, cargo;
        Pattern filtro_letra = Pattern.compile("[^1234567890.-]+[ \\t\\n\\x0B\\f\\r]", Pattern.CASE_INSENSITIVE);
        Pattern filtro_numero = Pattern.compile("-?[\\\\d\\\\.]+", Pattern.CASE_INSENSITIVE);
        Pattern filtro_data = Pattern.compile("[^1234567890/]+[ \\t\\n\\x0B\\f\\r]", Pattern.CASE_INSENSITIVE);
        int[] indices_invalidos = new int[10];
        int[] indices_validos = new int[10];
        int i = 0, j = 1, k = 0, m = 0, n = 0, f = 0;
        String aux_teste;

        while (j == 1 && i <= 10) {
            m = 0;
            n = 0;
            System.out.println("Deseja Adicionar Um Funcionario?\n 1 - Sim \n 2 - Nao\n");
            j = Integer.parseInt(entrada.nextLine());
            if (j == 1) {
                System.out.println("Digite o Nome do Funcionario: ");
                nome = entrada.nextLine();
                aux.nome.add(nome);

                System.out.println("Digite o Apelido: ");
                apelido = entrada.nextLine();
                aux.apelido.add(apelido);

                System.out.println("Digite a Data de Nascimento: ");
                nascimento = entrada.nextLine();
                aux.nascimento.add(nascimento);

                System.out.println("Digite o CPF: ");
                cpf = entrada.nextLine();
                aux.cpf.add(cpf);

                while (aux.EncontrarCPF(cpf)) {
                    System.out.println("CPF ja cadastrado, insira outro CPF:");
                    cpf = entrada.nextLine();
                }
                System.out.println("Digite o CEP: ");
                cep = entrada.nextLine();
                aux.cep.add(cep);

                System.out.println("Digite o Endereco: ");
                endereco = entrada.nextLine();
                aux.endereco.add(endereco);
                System.out.println("Digite o Numero: ");
                numero = entrada.nextLine();
                aux.numero.add(numero);

                System.out.println("Digite a Cidade: ");
                cidade = entrada.nextLine();
                aux.cidade.add(cidade);
                System.out.println("Digite o Estado:");
                estado = entrada.nextLine();
                aux.estado.add(estado);
                System.out.println("Digite o Cargo: ");
                cargo = entrada.nextLine();
                aux.cargo.add(cargo);
            }
            i++;
        }
        i = 0;
        while (i < aux.nome.size()) {
            Matcher somente_letras = filtro_numero.matcher(aux.nome.get(i));
            aux_teste = aux.nome.get(i);
            if (!somente_letras.find()) {
                invalido.nome.add(aux_teste);
                System.out.println(invalido.nome);
            }
            i++;
            aux_teste = "";
        }

//}
        System.out.println("Invalidos");
        System.out.println(invalido.nome);

        System.out.println("Validos");
        System.out.println(valido.nome);
    }
}

我的班级功能:

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

public class Funcionarios {

    List<String> nome = new ArrayList<>();
    List<String> apelido = new ArrayList<>();
    List<String> nascimento = new ArrayList<>();
    List<String> cpf = new ArrayList<>();
    List<String> cep = new ArrayList<>();
    List<String> endereco = new ArrayList<>();
    List<String> numero = new ArrayList<>();
    List<String> cidade = new ArrayList<>();
    List<String> estado = new ArrayList<>();
    List<String> cargo = new ArrayList<>();
    List<String> aux = new ArrayList<>();
    List<String> valido = new ArrayList<>();
    List<String> invalido = new ArrayList<>();
    String aux_cpf = "";
    String aux_campo = "";
    Scanner teste = new Scanner(System.in);
    int i = 0, m = 0;

    Funcionarios() {
    }

    //String Imprimir_Funcionarios(List nome, List apelido, List nascimento, List cpf, List cep, List endereco, List numero, List cidade, List estado, List cargo, int i){
    //  return String.format("%s;%s;%s;%s;%s;%s;%s;%s;%s;%s", nome.get(i),apelido.get(i),nascimento.get(i),cpf.get(i),cep.get(i),endereco.get(i),numero.get(i),cidade.get(i),estado.get(i),cargo.get(i));
    //}
    boolean EncontrarCPF(String CPF) {
        while (i < CPF.length()) {
            if (CPF.charAt(i) != '-' && CPF.charAt(i) != '.') {
                aux_cpf += String.valueOf(CPF.charAt(i));
            }
            i++;
        }
        i = 0;
        if (aux.contains(aux_cpf)) {
            return true;
        }

        aux.add(aux_cpf);
        aux_cpf = "";
        return false;
    }

}

并且 in 中的值aux.nome.get(1)将被复制到 invalido.nomeaux.nome.get(0)并将被复制到 valido.nome。当我的代码打印invalido.nome结果是一个空列表显示[]. 我已经验证了我的if条件及其工作。我该如何解决?请!我只是想区分正确键入的名称。

标签: javaarraylist

解决方案


很抱歉,但我确定您的匹配模式无法正常工作。

如果我用类似的东西代替它:

if(!aux_teste.matches("[a-zA-Z]+$"))

它将所有带有数字的名称放入 invalido.nome,确认将字符串放入列表的方法正常工作。

编辑:这就是 IMO 的“最小”测试用例应该是什么样子的——删除所有用户输入的东西并使用简单的数据:

public static void main(String[] args) {
    Funcionarios valido = new Funcionarios();
    Funcionarios invalido = new Funcionarios();
    Funcionarios aux = new Funcionarios();

    Pattern filtro_numero = Pattern.compile("-?[\\\\d\\\\.]+", Pattern.CASE_INSENSITIVE);

    aux.nome.add("Juan");
    aux.nome.add("Ju4n");
    aux.nome.add("Simon");
    aux.nome.add("S1mon");

    String aux_teste;
    int i = 0;
    while (i < aux.nome.size()) {
        Matcher somente_letras = filtro_numero.matcher(aux.nome.get(i));
        aux_teste = aux.nome.get(i);
        //if (!somente_letras.find()) {
        if(aux_teste.matches("[a-zA-Z]+$")){
            valido.nome.add(aux_teste);
        }
        else{
            invalido.nome.add(aux_teste);
        }
        i++;
    }

    System.out.println("Invalidos");
    System.out.println(invalido.nome);

    System.out.println("Validos");
    System.out.println(valido.nome);
}

注释并注释掉 2 个不同的 if 条件,看看你的模式不起作用。


推荐阅读