在方法中调用方法
Calling a method within methods
Java 的新手。我今晚有一项作业要交,但我对需要在 ( )
内分配的内容感到困惑。这是对电子邮件前缀的验证,我从用于获取前缀的方法中调用前缀“example”。任何帮助将不胜感激!
public static boolean isValidPrefixChar(char b) {
return isAlphaNumeric(b) || b == '.' || b == '-' || b == '_';
这就是我调用它的地方:
public static boolean isValidPrefix(String str4) {
getPrefix("example@mail.com");
isValidPrefixChar(???);
拜托谢谢!
您需要遍历前缀,并检查前缀的每个字符是否有效:
public static boolean isValidPrefixChar(char b) {
return isAlphaNumeric(b) || b == '.' || b == '-' || b == '_';
}
public static boolean isValidPrefix(String str4) {
String s = getPrefix("example@mail.com");
for(int i = 0 ; i < s.length; i++){
if(!isValidPrefixChar(s.charAt(i)){
return false;
}
}
return true;
}
tl;博士
要直接回答您的问题,请确定字符串第一个字符的 char
值。呼叫String#charAt
。不幸的是,该方法使用令人讨厌的从零开始的索引计数。所以第一个字符违反直觉是零而不是一个。
isValidPrefixChar( prefix.charAt( 0 ) );
但是……最好避免使用 char
类型。传递代码点编号:
isValidPrefixChar( prefix.codePointAt( 0 ) ); // Pass code point number assigned to the first (index zero) character of your input string.
char
已过时
char
类型自 Java 2 以来一直是旧类型。作为 16 位值,它在物理上无法表示大多数字符。而是使用 code point 整数。
代码点
每个已知角色都被分配了一个特定的永久编号作为标识符。这个数字被称为 code point.
.
= 句号 = 46 十进制
-
= HYPHEN-MINUS = 45 decimal
_
= 低线 = 95 十进制
您对单个字符的检查将采用 int
参数作为代码点。
public static boolean isValidPrefixCharacter ( int codePoint )
{
if ( ! Character.isValidCodePoint( codePoint ) ) { throw new IllegalArgumentException( "Invalid code point number passed." ); }
return
Character.isLetterOrDigit( codePoint )
|| codePoint == ".".codePointAt( 0 ) // Annoying zero-based index counting.
|| codePoint == "-".codePointAt( 0 )
|| codePoint == "_".codePointAt( 0 )
;
}
我假设 .codePointAt
调用将由编译器 inlined,但我不确定。
该方法会像这样从另一个方法调用。
public static boolean isValidPrefix ( String possibleEmailAddress )
{
Objects.requireNonNull( possibleEmailAddress );
if ( possibleEmailAddress.isBlank() ) { throw new IllegalArgumentException( "Possible email address must have some not text, not empty string." ); }
int codePointOfFirstCharacter = possibleEmailAddress.codePointAt( 0 ); // Annoying zero-based index counting.
boolean isPrefixValid = isValidPrefixCharacter( codePointOfFirstCharacter );
return isPrefixValid;
}
线束代码示例。
boolean isValid = App8.isValidPrefix( "example@example.com" );
System.out.println( "isValid = " + isValid );
isValid = App8.isValidPrefix( "example@example.com" );
System.out.println( "isValid = " + isValid );
当运行.
isValid = true
isValid = false
后来你澄清说你想检查每个角色,而不仅仅是第一个。在那种情况下,修改那个方法。
public static boolean isValidPrefix ( String possibleEmailAddress )
{
Objects.requireNonNull( possibleEmailAddress );
if ( possibleEmailAddress.isEmpty() ) { throw new IllegalArgumentException( "Possible email address must have some not text, not empty string." ); }
String emailPrefix = possibleEmailAddress.split( "@" )[ 0 ]; // Annoying zero-based index counting.
int[] codePoints = emailPrefix.codePoints().toArray();
for ( int codePoint : codePoints )
{
boolean isCharacterValid = isValidPrefixCharacter( codePoint );
if ( ! isCharacterValid ) { return false; }
}
return true;
}
并扩展我们的测试。
boolean isValid = App8.isValidPrefix( "example@example.com" );
System.out.println( "isValid = " + isValid );
isValid = App8.isValidPrefix( "example@example.com" );
System.out.println( "isValid = " + isValid );
isValid = App8.isValidPrefix( "example@example.com" );
System.out.println( "isValid = " + isValid );
当运行.
isValid = true
isValid = false
isValid = false
Java 的新手。我今晚有一项作业要交,但我对需要在 ( )
内分配的内容感到困惑。这是对电子邮件前缀的验证,我从用于获取前缀的方法中调用前缀“example”。任何帮助将不胜感激!
public static boolean isValidPrefixChar(char b) {
return isAlphaNumeric(b) || b == '.' || b == '-' || b == '_';
这就是我调用它的地方:
public static boolean isValidPrefix(String str4) {
getPrefix("example@mail.com");
isValidPrefixChar(???);
拜托谢谢!
您需要遍历前缀,并检查前缀的每个字符是否有效:
public static boolean isValidPrefixChar(char b) {
return isAlphaNumeric(b) || b == '.' || b == '-' || b == '_';
}
public static boolean isValidPrefix(String str4) {
String s = getPrefix("example@mail.com");
for(int i = 0 ; i < s.length; i++){
if(!isValidPrefixChar(s.charAt(i)){
return false;
}
}
return true;
}
tl;博士
要直接回答您的问题,请确定字符串第一个字符的 char
值。呼叫String#charAt
。不幸的是,该方法使用令人讨厌的从零开始的索引计数。所以第一个字符违反直觉是零而不是一个。
isValidPrefixChar( prefix.charAt( 0 ) );
但是……最好避免使用 char
类型。传递代码点编号:
isValidPrefixChar( prefix.codePointAt( 0 ) ); // Pass code point number assigned to the first (index zero) character of your input string.
char
已过时
char
类型自 Java 2 以来一直是旧类型。作为 16 位值,它在物理上无法表示大多数字符。而是使用 code point 整数。
代码点
每个已知角色都被分配了一个特定的永久编号作为标识符。这个数字被称为 code point.
.
= 句号 = 46 十进制-
= HYPHEN-MINUS = 45 decimal_
= 低线 = 95 十进制
您对单个字符的检查将采用 int
参数作为代码点。
public static boolean isValidPrefixCharacter ( int codePoint )
{
if ( ! Character.isValidCodePoint( codePoint ) ) { throw new IllegalArgumentException( "Invalid code point number passed." ); }
return
Character.isLetterOrDigit( codePoint )
|| codePoint == ".".codePointAt( 0 ) // Annoying zero-based index counting.
|| codePoint == "-".codePointAt( 0 )
|| codePoint == "_".codePointAt( 0 )
;
}
我假设 .codePointAt
调用将由编译器 inlined,但我不确定。
该方法会像这样从另一个方法调用。
public static boolean isValidPrefix ( String possibleEmailAddress )
{
Objects.requireNonNull( possibleEmailAddress );
if ( possibleEmailAddress.isBlank() ) { throw new IllegalArgumentException( "Possible email address must have some not text, not empty string." ); }
int codePointOfFirstCharacter = possibleEmailAddress.codePointAt( 0 ); // Annoying zero-based index counting.
boolean isPrefixValid = isValidPrefixCharacter( codePointOfFirstCharacter );
return isPrefixValid;
}
线束代码示例。
boolean isValid = App8.isValidPrefix( "example@example.com" );
System.out.println( "isValid = " + isValid );
isValid = App8.isValidPrefix( "example@example.com" );
System.out.println( "isValid = " + isValid );
当运行.
isValid = true
isValid = false
后来你澄清说你想检查每个角色,而不仅仅是第一个。在那种情况下,修改那个方法。
public static boolean isValidPrefix ( String possibleEmailAddress )
{
Objects.requireNonNull( possibleEmailAddress );
if ( possibleEmailAddress.isEmpty() ) { throw new IllegalArgumentException( "Possible email address must have some not text, not empty string." ); }
String emailPrefix = possibleEmailAddress.split( "@" )[ 0 ]; // Annoying zero-based index counting.
int[] codePoints = emailPrefix.codePoints().toArray();
for ( int codePoint : codePoints )
{
boolean isCharacterValid = isValidPrefixCharacter( codePoint );
if ( ! isCharacterValid ) { return false; }
}
return true;
}
并扩展我们的测试。
boolean isValid = App8.isValidPrefix( "example@example.com" );
System.out.println( "isValid = " + isValid );
isValid = App8.isValidPrefix( "example@example.com" );
System.out.println( "isValid = " + isValid );
isValid = App8.isValidPrefix( "example@example.com" );
System.out.println( "isValid = " + isValid );
当运行.
isValid = true
isValid = false
isValid = false