我正在开发javaiban验证器,它应该从特定的excel列中获取iban编号,并用输出“valid/invalid”验证它们。
我在ibanchecker03.java类中设置了验证器本身。当我把任意数量的iban数字放入 String[] ibans = {"iban number placed here"}
在我的第二节课中,临时称为“homeoffice.java”,我掌握了excel文件的所有操作。它遍历raw并获取所有iban for me+并将其存储到“cellvalue”变量中。
现在我需要把这两个类连接起来,这就是我目前所坚持的。
你能帮我怎样才能从中得到结果吗 cellvalue
并将其传递到中的ibanchecker03.java类中 String[] ibans = {""}
所以它能帮我验证IBAN?
这样做最好的办法是什么?
代码如下:
public class IBANChecker03
{
private static final String DEFSTRS = ""
+ "AL28 AD24 AT20 AZ28 BE16 BH22 BA20 BR29 BG22 "
+ "HR21 CY28 CZ24 DK18 DO28 EE20 FO18 FI18 FR27 GE22 DE22 GI23 "
+ "GL18 GT28 HU28 IS26 IE22 IL23 IT27 KZ20 KW30 LV21 LB28 LI21 "
+ "LT20 LU20 MK19 MT31 MR27 MU30 MC27 MD24 ME22 NL18 NO15 PK24 "
+ "PS29 PL28 PT25 RO24 SM27 SA24 RS22 SK24 SI19 ES24 SE24 CH21 "
+ "TN24 TR26 AE23 GB22 VG24 GR27 CR21";
private static final Map<String, Integer> DEFINITIONS = new HashMap<>();
static
{
for (String definition : DEFSTRS.split(" "))
DEFINITIONS.put(definition.substring(0, 2), Integer.parseInt(definition.substring(2)));
}
public static void main(String[] args)
throws FileNotFoundException, IOException, Exception
{
String[] ibans = {"IBAN goes here"};
// HERE I NEED TO PASS Cell Values from HomeOffice.java
for (String iban : ibans)
System.out.printf("%s is %s.%n", iban, validateIBAN(iban) ? "valid" : "not valid");
}
static boolean validateIBAN(String iban)
{
iban = iban.replaceAll("\\s", "").toUpperCase(Locale.ROOT);
int len = iban.length();
if (len < 4 || !iban.matches("[0-9A-Z]+") || DEFINITIONS.getOrDefault(iban.substring(0, 2), 0) != len)
return false;
iban = iban.substring(4) + iban.substring(0, 4);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < len; i++)
sb.append(Character.digit(iban.charAt(i), 36));
BigInteger bigInt = new BigInteger(sb.toString());
return bigInt.mod(BigInteger.valueOf(97)).intValue() == 1;
}
}
public class HomeOffice
{
public static void main(String[] args)
throws Exception
{
File excelFile = new File("IBNTEST.xlsx");
FileInputStream fis = new FileInputStream(excelFile);
XSSFWorkbook workbook = new XSSFWorkbook(fis);
XSSFSheet sheet = workbook.getSheetAt(0);
// Here we start iterating through raws and cells
Iterator<Row> rowIt=sheet.iterator();
while (rowIt.hasNext()) {
Row row = rowIt.next();
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
if (cell.getColumnIndex() == 7) { // Choose number of column
System.out.println(cell.toString() + ","); // Print cells
String cellvalue = cell.toString(); // This I need to pass into IBANCHECKER03.java
// Pass into String[] ibans = {};
//-----------HERE I NEED TO CONNECT TO IBANChecker
}
workbook.close();
fis.close();
}
}
}
}
1条答案
按热度按时间nwnhqdif1#
如果你使用
args
传递给IBANChecker03.main
作为要检查的字符串数组,您可以使用HomeOffice
像这样:但是,在您提供的代码中,您正在遍历每个单元格,并且您已经指出希望将单个单元格的值传递给
IBANChecker03
. 此值:你可以用很多方法来处理这个问题。可以将单元格值打包到数组中并传递:
你可以让
validateIBAN
public,或者如果这些to类在同一个包中,那么您可以直接调用它,因为默认情况下方法是包私有的:如果你真正感兴趣的是
IBANChecker03
验证并打印单个单元格,但您希望main
方法,然后把逻辑从main
像这样: