在方法中调用方法



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(???);

谢谢!

br

要直接回答您的问题,请确定字符串的第一个字符的char值。呼叫String#charAt。不幸的是,该方法使用了恼人的从零开始的索引计数。因此,与直觉相反,第一个字符是0而不是1。

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已过时

自Java 2以来,char类型一直是遗留的。作为一个16位值,它在物理上无法表示大多数字符。请使用代码点整数。

<标题>

代码点每个已知字符都被分配了一个特定的永久号码作为标识符。这个数字被称为代码点。

  • .= FULL STOP = 46 decimal
  • -= h - minus = 45 decimal
  • _= LOW LINE = 95 decimal

您对单个字符的检查将采用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调用将由编译器内联,但我不确定。

这个方法可以从另一个方法中调用。

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

你需要做遍历前缀,并检查前缀的每个字符是否有效:

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;
}