java全角、半角字符的关系以及转换详解

Java中的字符类型是char,我们通常所见的字符分为全角和半角字符。

在Java中,半角字符在字符编码中仅占一个字节(即8位),而全角字符一般占两个字节(即16位),因此在处理含有全角字符的字符串时,需要进行字符转换。

Java提供了转换半角为全角以及转换全角为半角的方法。其中半角转全角主要使用的是将字符Unicode码值增加65248(0xFEE0)来实现,全角转半角使用的是将字符Unicode码值减去65248,如下所示:

/**
 * 将半角字符转化为全角字符
 *
 * @param input String,待转换字符串
 * @return String, 全角字符串.
 */
public static String toFull(String input) {
    if (input == null) {
        return "";
    }

    StringBuilder sb = new StringBuilder(input.length() * 2);
    for (int i = 0; i < input.length(); i++) {
        char c = input.charAt(i);
        // 如果是半角空格
        if (c == ' ') {
            sb.append((char) 12288);
        } else if (c < 127) { // 如果是半角字符,直接转换即可
            sb.append((char) (c + 65248));
        } else { // 其他全角字符,待完善
            sb.append(c);
        }
    }
    return sb.toString();
}

/**
 * 将全角字符转化为半角字符
 *
 * @param input String,待转换字符串
 * @return String, 半角字符串
 */
public static String toHalf(String input) {
    if (input == null) {
        return "";
    }

    StringBuilder sb = new StringBuilder(input.length() * 2);
    for (int i = 0; i < input.length(); i++) {
        char c = input.charAt(i);
        // 如果是全角空格
        if (c == 12288) {
            sb.append((char) 32);
        } else if (c > 65280 && c < 65375) { // 如果是全角字符,进行转换
            sb.append((char) (c - 65248));
        } else {
            sb.append(c);
        }
    }
    return sb.toString();
}

以下是两个示例以阐述该问题的实际应用。

示例1:计算中文字符串的长度

我们知道String类型的length()方法是用于获取字符串长度的,但是对于包含全角字符的字符串,我们需要将每个全角字符转换为两个半角字符,才可以得到正确的长度。

/**
 * 计算中文字符串的长度
 *
 * @param str String,待计算的中文字符串
 * @return int, 中文字符串的长度
 */
public static int cnLength(String str) {
    if (str == null) {
        return 0;
    }
    // 将中文字符转换为全角
    String fullStr = toFull(str);
    // 计算全角字符的个数
    return fullStr.length();
}

示例2:判断是否包含中文字符

判断一个字符串是否包含中文字符,我们可以使用正则表达式进行匹配,但是需要注意的是,Unicode编码中,中文字符的范围是 [\u4e00-\u9fa5],而全角字符却不属于这个范围,因此需要将全角字符转换为中文字符。

/**
 * 判断字符串是否包含中文字符
 *
 * @param str String, 待判断的字符串
 * @return boolean, 如果包含中文字符,返回true;否则返回false
 */
public static boolean hasCNChar(String str) {
    if (str == null) {
        return false;
    }
    // 将全角字符转换为中文字符
    String halfStr = toHalf(str);
    // 匹配是否包含中文字符
    return halfStr.matches(".*[\u4e00-\u9fa5].*");
}

以上就是Java中处理全角、半角字符的关系以及转换的详细攻略,在实际应用中,如果遇到包含全角字符的字符串处理问题,可以参考上述方法进行解决。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java全角、半角字符的关系以及转换详解 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • Maven多模块工程Module开发(图文教程)

    Maven多模块工程Module开发(图文教程)是一篇非常好的教程,它详细介绍了如何使用Maven进行多模块工程Module开发。下面是对该教程的完整攻略: 什么是多模块工程 多模块工程是一种由多个Maven项目组成的工程。每个子项目都独立的构建,然后这些子项目被一个父工程管理,父工程控制子项目的构建次序和构建参数。多模块工程是一种组织代码的方式,适合大型项…

    Java 2023年5月19日
    00
  • java和js实现的洗牌小程序

    洗牌算法简介 洗牌算法即可将一个包含n个元素的数组打乱,保证每个元素均匀地分布在原数组中。常用的洗牌算法有Fisher–Yates算法(也被称为Knuth-Shuffle算法),其核心思想是将数组从后往前遍历,对于未处理的元素,随机从已处理的元素中选出一个,然后与该元素交换。这样可以保证每个元素被随机地赋予新的位置。 Java实现 Java官方提供了Coll…

    Java 2023年5月23日
    00
  • java的nio的使用示例分享

    Java NIO的使用示例分享 Java NIO(New IO)是从Java 1.4版本引入的替代标准IO的API,它提供了更快的IO操作,包括文件操作、网络操作等。本篇文章将详细介绍Java NIO的使用示例。 NIO基础知识 NIO的核心是缓冲区(Buffer)和通道(Channel)。缓冲区是一个对象,在IO操作中作为数据容器使用,通道则是表示和数据源…

    Java 2023年5月20日
    00
  • 基于springboot实现数据可视化的示例代码

    下面是基于Spring Boot实现数据可视化的完整攻略。 一、准备工作 首先确保你已经安装了Java JDK和Spring Boot,可以通过官网下载并安装。 接着,需要选择一个可视化工具,推荐使用Echarts图表库,因为Echarts是目前最流行的数据可视化工具之一,且可以很方便的与Spring Boot集成。 最后,我们需要一些待可视化的数据,以便进…

    Java 2023年5月20日
    00
  • 浅谈java对象转json,数字精确出现丢失问题

    浅谈Java对象转JSON, 数字精确出现丢失问题 在Java中,JSON序列化是一项常见的处理任务。通过将对象序列化成JSON,使得数据更容易传递和存储。但是在转换基本数据类型时,小数点精确度丢失的问题也经常出现。本文将深入探讨Java对象转JSON时数字精确出现丢失的问题,并提供解决方案。 问题描述 在Java中进行JSON序列化时,会将Java中的数字…

    Java 2023年5月26日
    00
  • java.lang.String类的使用

    Java.lang.String类的使用 java.lang.String 类是 Java 标准库中最常用的类之一,用于表示字符串。本篇攻略旨在帮助读者全面了解 String 类的使用方法,并且提供几个示例说明。 基本使用 String 对象是不可变的,也就是说一旦创建了 String 对象,它的值将不能被更改。使用 String 类最基本的方法是创建一个新…

    Java 2023年5月27日
    00
  • Java实战之实现用户登录

    让我详细讲解Java实现用户登录的攻略吧。 1. 确定需求 在实现用户登录功能前,首先要明确用户登录所需要的基本信息。一般来说,用户登录需要包括以下几个方面: 用户名或账号 密码 登录操作 在确定了这些基本信息后,就可以进入下一步,即实现具体的登录功能。 2. 实现登录功能 接下来需要实现登录功能,具体步骤如下: 2.1 创建用户账号 在实现用户登录功能之前…

    Java 2023年5月18日
    00
  • ASP.NET微信公众号添加菜单

    下面我将为您详细讲解“ASP.NET微信公众号添加菜单”的完整攻略。 1. 准备工作 首先,在进行微信公众号开发之前,我们需要准备以下工作: 申请微信公众号账号,并获取到对应的AppID和AppSecret。 下载微信公众号开发者工具,该工具可帮助我们进行调试和预览。 创建一个ASP.NET项目,并引入微信公众平台SDK。 2. 添加菜单 在准备工作完成后,…

    Java 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部