【问题标题】:How to know half-width or full-width character?如何知道半角或全角字符?
【发布时间】:2012-11-13 14:06:03
【问题描述】:

我想知道字符串中包含的字符是半角还是全角。

所以我已经这样测试了:

 /* Checking typing password is valid or not.
 * If length of typing password is less than 6 or
 * is greater than 15 or password is composed by full-width character at least one,
 * it will return false.
 * If it is valid, it will return true.
 * @param cmdl
 * @param oldPassword
 * @return
 */
public boolean isValidNewPassword(String password) {

    if ((password.length() < 6)
            || (password.length() > 15) || (isContainFullWidth(password))) {
        return false;
    }

    return true;
}

/**
 * Checking full-width character is included in string.
 * If full-width character is included in string,
 * it will return true.
 * If is not, it will return false.
 * @param cmdl
 * @return
 */
public boolean isContainFullWidth(String cmdl) {
    boolean isFullWidth = false;
    for (char c : cmdl.toCharArray()) {
        if(!isHalfWidth(c)) {
            isFullWidth = true;
            break;
        }
    }

    return isFullWidth;
}

/**
 * Checking character is half-width or not.
 * Unicode value of half-width range:
 * '\u0000' - '\u00FF'
 * '\uFF61' - '\uFFDC'
 * '\uFFE8' - '\uFFEE'
 * If unicode value of character is within this range,
 * it will be half-width character.
 * @param c
 * @return
 */
public boolean isHalfWidth(char c)
{
    return '\u0000' <= c && c <= '\u00FF'
        || '\uFF61' <= c && c <= '\uFFDC'
        || '\uFFE8' <= c && c <= '\uFFEE' ;
}

但并不是所有全角和半角字符都可以。

那么,请问您对这个问题有什么建议吗?

半角和全角用于亚洲语言,例如日语

写日文有全角和半角两种。

半角字符=アデチャエウィオプ

全角字符 = アsdファsヂオpp

非常感谢!

【问题讨论】:

  • 什么是“半角”字符?什么是“全角”字符?
  • 同一条船.. 虽然solutions.asia/2011/05/…这个网站非常详细

标签: java width character


【解决方案1】:

如果您只是想确定半角-前角配对的字符(例如A),那么它们并不多,它应该'像你所做的那样计算出他们的范围并不难。

另一种常见但效率不高的方法是将它们转换为 Shift JIS 并计算产生的字节数:2 为全角,1 为半角-宽度。例如"ア".getBytes("MS932").length

在这种情况下,这类问题的目的通常是输入验证。 (即限制或转换其中一个或另一个)。这种情况下,要处理的字符范围自然是有限的(因为不能配对就不能转换),不需要支持整个Unicode集。

但是,如果您确实想为成熟的 Unicode 范围执行此操作,则使用 icu4j library 获取 UCharacter.EastAsianWidth property 可以做到这一点。请参阅此答案,了解如何走这条路:Analyzing full width or half width character in Java

【讨论】:

    【解决方案2】:

    有了号码就可以使用这个代码

        /**
     * Full-angle string conversion half-corner string
     * 1, half-width characters are starting from 33 to 126 end
     * 2, the full-width character corresponding to the half-width character is from 65281 start to 65374 end
     * 3, the half corner of the space is 32. The corresponding Full-width space is 12288
     * The relationship between Half-width and Full-width is obvious, except that the character offset is 65248 (65281-33 = 65248).
     *
     * @param fullWidthStr Non-empty full-width string
     * @return Half-angle string
     */
    public String halfWidth2FullWidth(String fullWidthStr) {
        if (null == fullWidthStr || fullWidthStr.length() <= 0) {
            return "";
        }
        char[] arr = fullWidthStr.toCharArray();
        for (int i = 0; i < arr.length; ++i) {
            int charValue = (int) arr[i];
            if (charValue >= 33 && charValue <= 126) {
                arr[i] = (char) (charValue + 65248);
            } else if (charValue == 32) {
                arr[i] = (char) 12288;
            }
        }
        return new String(arr);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多