java - 列表不添加日期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
条件及其工作。我该如何解决?请!我只是想区分正确键入的名称。
解决方案
很抱歉,但我确定您的匹配模式无法正常工作。
如果我用类似的东西代替它:
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 条件,看看你的模式不起作用。
推荐阅读
- angular - 取消订阅 observables 会让你的应用程序更快吗?
- python - TOS thinkScript“rec”逻辑
- windows - 在 Windows 上使用 ProxyCommand 的 SSH 配置无法连接
- jenkins - Jenkins docker build 无法执行 start:java.net.SocketException: Broken pipe (Write failed)
- flutter - Flutter Dart:底部对齐行小部件
- javascript - 使用 javascript 发布数据
- javascript - 如何在 React Native 的不同屏幕上显示或隐藏状态栏
- wordpress - 隐藏 WooCommerce 购物车中特定产品类别的 woocommerce-checkout-review-order 表
- c# - 改进 EFCore 查询以实现快速操作
- rust - 与不同网络上的计算机建立 TCP 连接,而无需收件人进入其路由器设置?