Передача String переменной между двумя основными классами, передача ее в String Array - PullRequest
0 голосов
/ 13 февраля 2020

Я работаю над java IBAN Validator, который должен брать номера IBAN из определенного столбца Excel и проверять их с выводом "valid / invalid".

У меня установлен сам валидатор в IBANChecker03. java учебный класс. Это прекрасно работает, когда я помещаю любое число номеров IBAN в String[] ibans = {"iban number placed here"}

Во втором классе, который временно называется «HomeOffice. java», у меня есть все, что касается файла Excel. Он перебирает r aws и берет все IBAN для меня + сохраняет его в переменной "cellvalue".

Теперь мне нужно как-то соединить эти два класса вместе, что я сейчас и застрял на ,

Не могли бы вы помочь мне, как теперь я могу взять результаты из cellvalue и передать их в IBANChecker03. java класс в String[] ibans = {""}, чтобы он проверял ibans для меня?

Что было бы лучше всего сделать это?

Вот код:

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 Ответ

0 голосов
/ 14 февраля 2020

Если вы используете args, переданный IBANChecker03.main в качестве массива строк для проверки, вы можете легко вызвать его с массивом строк из HomeOffice, например:

public class IBANChecker03 {

    public static void main(String[] args) {
        String[] ibans = args;
        for(String iban : ibans){
            System.out.printf("%s is %s.%n", iban, validateIBAN(iban) ? "valid" : "not valid");
        }
    }

    static boolean validateIBAN(String iban){
        // validation code
    }
}

public class HomeOffice {
    public static void main(String[] args) {
        String[] vals = new String[]{"5616516", "8984546", "6516546", "9684654"};
        IBANChecker03.main(vals);
    }
}

Однако В предоставленном вами коде вы перебираете каждую ячейку и указали, что вы хотите sh передать значение отдельной ячейки IBANChecker03. Это значение:

String cellvalue = cell.toString(); 

Вы можете справиться с этим несколькими способами. Вы можете упаковать значение ячейки в массив и передать его:

String[] cellvalue = new String[]{cell.toString()};
IBANChecker03.main(cellValue);

Вы можете сделать validateIBAN publi c, или, если эти классы находятся в одном пакете, вы можете просто вызвать его напрямую так как методы по умолчанию являются пакетными:

String cellvalue = cell.toString();
if(IBANChecker03.validateIBAN(cellvalue)){
    //Do Something
}

Если вас действительно интересует наличие IBANChecker03 проверки и печати для одной ячейки, но вам нужен метод main для тестирования или что бы то ни было, просто переместите эту логику c из main примерно так:

public class IBANChecker03 {

    public static void printValid(String iban){
        System.out.printf("%s is %s.%n", iban, validateIBAN(iban) ? "valid" : "not valid");
    }

    public static void main(String[] args) {
        String[] ibans = {"IBAN goes here"};
        for(String iban : ibans){
            printValid(iban);
        }
    }

    static boolean validateIBAN(String iban){
        //Validation code
    }
}

public class HomeOffice {
    public static void main(String[] args) {
        //Code to get cell
        String cellvalue = cell.toString();
        IBANChecker03.printValid(cellvalue);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...