2015-02-08 2 views
0

Я пытаюсь изменить часть класса (символ), поэтому я могу изменить конец как .isDigit например. Как я могу изменить тип тестера на whaterver я хочу, но я не знаю, как я мог это сделать.Попытка изменить часть класса Java

public static boolean testText (String password, int length,typeTester) { 
    boolean test = false; 
    for (int count = 0; count <= (length-1); count++){ 
     char resultConverted = password.charAt(count); 
     if (Character.typeTest(resultConverted)) 
     test = true; 
    } 
    return test; 

    } 

редактировать: так есть теперь способ сделать лучше, чем просто делать что-то вроде этого, чтобы проанализировать слово:

public static boolean testUpperCase (String password, int length) { 
    boolean upperCase = false; 
    for (int count = 0; count <= (length-1); count++){ 
     char resultConverted = password.charAt(count); 
     if (Character.isUpperCase(resultConverted)) 
     upperCase = true; 
    } 

    return upperCase; 
    } 
    public static boolean testLowerCase (String word, int length) { 
    boolean lowerCase = false; 
    for (int count = 0; count <= (length-1); count++){ 
     char resultConverted = word.charAt(count); 
     if (Character.isLowerCase(resultConverted)) 
     lowerCase = true; 
    } 
    return lowerCase; 

    } 

Это просто вопрос действительно найти более элегантную альтернативу тому, что у меня есть сделано до сих пор.

+0

Вы хотите изменить код 'Character' класса-оболочки в JDK? –

+1

Вы не можете добавлять или изменять методы класса без его расширения, а 'Character' - это' final', поэтому его нельзя продлить. Короче говоря, вам нужно будет создать метод, используя методы класса 'Character' для выполнения вашего требования. –

+1

Класс 'Character' является' final', поэтому вы ничего не можете добавить к нему. Однако вы можете определить свой собственный метод 'bool isFancyDancy (char)' вне этого класса. Если вы хотите добавить что-то на свой вопрос, используйте функцию «edit» вместо публикации комментария. – 5gon12eder

ответ

1

Вот более элегантный вариант testUpperCase:

boolean testUpperCase(String password) { 
    for(char c : password.toCharArray()) { 
    if(Character.isUpperCase(c)) { 
     return true; 
    } 
    } 
    return false; 
} 
+0

Рекурсия в этой ситуации: Нет. Просто нет. Это похоже на рекурсию для последовательности Фибоначчи. (Лицо 1: Повернем операцию 'O (n)' в операцию 'O (2^n)' Личность 2: Почему я об этом не подумал?). –

+0

@k_g Если вы читаете мой ответ, в нем четко говорится, что рекурсивное решение неэффективно. Это пришло мне в голову, когда я подумал об альтернативах. Тем не менее, я удалил этот (не рекомендуется!) Подход, чтобы избежать путаницы. –

+0

жаль насчет путаницы. Моя путаница была связана с тем, что существуют люди, которые пытаются использовать рекурсию для всех, потому что могут. –

0

Если строка не равна строку, преобразованную в нижний регистр означает, что должны быть какие-то символы верхнего регистра.

/* Test if there are any uppercase character in the string */ 
boolean testUpperCase(String password) { 
    return !password.equals(password.toLowerCase()); 
} 

И то же самое, чтобы проверить, если строка имеет символы нижнего регистра:

/* Test if there are any lowercase character in the string */ 
boolean testLowerCase(String password) { 
    return !password.equals(password.toUpperCase()); 
} 
+1

Чтобы узнать, содержит ли строка символы верхнего регистра, вам действительно нужно использовать 'toLowerCase()' и наоборот. –

+0

Я обновил свой ответ, чтобы показать, как реализовать методы в вопросе, используя'toLowerCase() 'и'toUpperCase()'. –

Смежные вопросы