该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我现在想写一个方法来判断输入的字符串是否为半角的英字、半角的数字、半角的记号、全角及半角的カナ、全角及半角的汉字。现在半角的英字、数字、记号都已经判断出来了,如下。请问:全角及半角的カナ、全角及半角的汉字应该如何判断?最好在isAlphabetOrNumberOrSymbolOrKana这个方法中完成,如果能完成全部功能,也可以帮忙另外写个方法,谢谢。
/**
* 指定された文字列が半角英字(大文字、小文字ともに可)か半角数字、半角记号として使用可能かどうかを判别します。
*
* 文字列が半角英字(大文字、小文字ともに可)か半角数字、半角记号のみで
* 构成されていればtrueを返します。
*
* @pre $none
* @post $none
* @param target 対象文字列。
* @return true:文字列は半角英字、半角数字、または半角记号。false:文字列は半角英字、半角数字、半角记号以外。
*/
public static boolean isAlphabetOrNumberOrSymbolOrKana(String target) {
if (target == null || target.equals("")) {
return false;
}
// 全角チェック
if (target.length() != target.getBytes().length) {
return false;
}
// 1文字ずつ半角英字(大文字,小文字可) or 半角数字 or 半角记号であることを确认する
for (int i = 0; i
char targetChar = target.charAt(i);
if (!isNumber(targetChar) && !isAlphabet(targetChar) && !isSymbol(targetChar)) {
return false;
}
}
return true;
}
/**
* 指定された文字が半角数字かどうかを判别します。
*
* 文字が半角数字の场合trueを返します。
*
* @pre $none
* @post $none
* @param target 対象文字。
* @return true:文字は半角数字。false:文字は半角数字以外。
*/
private static boolean isNumber(char target) {
// 全角チェック
String targetStr = String.valueOf(target);
if (targetStr.length() != targetStr.getBytes().length) {
return false;
}
// 数字チェック
return Character.isDigit(target);
}
/**
* 指定された文字が半角英字かどうかを判别します。
*
* 文字が半角英字(大文字、小文字ともに可)の场合trueを返します。
*
* @pre $none
* @post $none
* @param target 対象文字。
* @return true:文字は半角英字。false:文字は半角英字以外。
*/
private static boolean isAlphabet(char target) {
// 全角チェック
String targetStr = String.valueOf(target);
if (targetStr.length() != targetStr.getBytes().length) {
return false;
}
// 英字チェック
Character character = new Character(target);
if (!(character.hashCode() >= new Character('A').hashCode()
&& character.hashCode() <= new Character('Z').hashCode())
&& !(character.hashCode() >= new Character('a').hashCode()
&& character.hashCode() <= new Character('z').hashCode())) {
return false;
}
return true;
}
/**
* 指定された文字が半角记号かどうかを判别します。
*
* 文字が半角记号の场合trueを返します。
*
* @pre $none
* @post $none
* @param target 対象文字。
* @return true:文字は半角记号。false:文字は半角记号以外。
*/
private static boolean isSymbol(char target) {
// 全角チェック
String targetStr = String.valueOf(target);
if (targetStr.length() != targetStr.getBytes().length) {
return false;
}
// 记号チェック
Character character = new Character(target);
if (!(character.hashCode() >= new Character(' ').hashCode()
&& character.hashCode() <= new Character('/').hashCode())
&& !(character.hashCode() >= new Character(':').hashCode()
&& character.hashCode() <= new Character('@').hashCode())
&& !(character.hashCode() >= new Character('[').hashCode()
&& character.hashCode() <= new Character('`').hashCode())
&& !(character.hashCode() >= new Character('{').hashCode()
&& character.hashCode() <= new Character('~').hashCode())) {
return false;
}
return true;
}