半角转全角

本文介绍了一个简单的Java方法,用于将输入的字符串中的所有半角字符转换为对应的全角字符,并对特殊字符进行取消转义处理。通过遍历字符串中的每一个字符,判断其ASCII值来决定是否进行转换。
public static String filtString(String s) 
{
	s = s.replaceAll("\\\\","");
	char c[] = s.toCharArray();
	for (int i = 0; i < c.length; i++) 
	{
		if (c[i] == ' ') 
		{
			c[i] = '\u3000';
		}
		else if (c[i] < '\177') 
		{
			c[i] = (char) (c[i] + 65248);
		}
	}
	return new String(c);
}

 取消转义,并把字符串中全部半角字符转为全角字符

<think>好的,用户现在问的是Java中如何将半角字符换为全角字符。首先,我需要回顾一下之前的对话历史,用户之前询问的是全角半角混用导致字符串比较的问题,现在他们可能是在那个问题的基础上,想要进一步处理换的问题,确保字符串的一致性。 用户的需求可能是在处理输入数据时,需要统一字符格式,比如将用户输入或外部数据中的半角字符换为全角,以避免比较错误或其他处理问题。他们可能是在处理中文环境下的应用,比如财务系统、文档处理,或者需要符合某些排版规范的地方,这时候统一使用全角字符是必要的。 首先,我需要确认半角全角字符在Unicode中的编码范围。半角数字、字母和符号通常位于ASCII范围内,而对应的全角字符则在Unicode的特定区域。例如,半角数字'0'是U+0030,全角则是U+FF10到U+FF19。字母和符号也有对应的全角编码。因此,换需要处理这些字符的映射关系。 接下来,我需要考虑如何实现换。常见的做法是遍历字符串中的每个字符,判断是否为半角字符,如果是,则找到对应的全角字符的Unicode编码,然后替换。这可以通过计算偏移量来实现,比如半角数字全角时,Unicode值相差0xFEE0(65280)。但需要注意,不是所有半角字符都有对应的全角,比如控制字符或特殊符号可能需要特殊处理。 然后,我需要考虑用户可能的错误场景。例如,如果用户传入的字符串中包含非半角字符,换函数应该如何处理?是否需要跳过或者保留原样?此外,还要注意空格的处理,半角空格是U+0020,全角空格是U+3000,这也是常见的换点。 另外,用户可能需要一个工具类或者实用方法,方便在项目中重复使用。因此,提供一个示例代码,并解释其原理和用法是必要的。同时,提醒用户注意换的范围,比如是否包括字母、数字、符号,或者只换其中一部分。 还有,用户可能关心性能问题,特别是在处理大字符串时。需要确保换方法高效,比如使用StringBuilder来构建结果字符串,避免频繁的字符串拼接导致的性能问题。 最后,需要给出测试用例或示例,展示换前后的效果,帮助用户理解代码的作用。比如,输入"123abc! ",换后应该变成全角的"123abc! "。 可能还需要提到第三方库,比如Apache Commons Lang中的StringUtils,是否有现成的换方法,但考虑到用户可能不想引入外部依赖,所以优先展示手动实现的代码。 总结来说,回答需要包括以下部分: 1. 半角全角字符的Unicode编码差异 2. 换的基本思路和算法 3. 具体的Java代码实现 4. 示例输入输出 5. 注意事项和扩展建议 6. 可能的第三方库方法 这样用户就能全面了解如何实现半角全角,并且可以根据自己的需求进行调整。</think>### **分步解释:Java 实现半角字符全角字符** 在中文场景中,**半角字符**(ASCII 字符)与**全角字符**(宽字符)的 Unicode 编码不同。Java 可通过字符编码偏移量实现二者的换。以下是具体实现逻辑和代码示例: --- ### **1. 核心原理:Unicode 编码偏移** | 字符类型 | 示例 | Unicode 编码范围 | 全角偏移量 | |----------|------|----------------------|------------| | 半角数字 | `0-9` | `U+0030` ~ `U+0039` | **+65248** → 全角 `0-9` (`U+FF10`~`U+FF19`) | | 半角字母 | `a-z/A-Z` | `U+0061`~`U+007A` / `U+0041`~`U+005A` | **+65248** → 全角 `a-z`/`A-Z` (`U+FF41`~`U+FF5A`/`U+FF21`~`U+FF3A`) | | 半角空格 | ` ` | `U+0020` | → 全角空格 ` ` (`U+3000`) | | 半角符号 | `!`, `@` 等 | 如 `U+0021` | **+65248** → 全角 `!` (`U+FF01`) | **规则**: - **可换字符**:数字、字母、常见符号(需逐个映射) - **直接替换**:半角空格需单独处理(`U+0020` → `U+3000`) - **保留原样**:非半角字符(如汉字)不换 --- ### **2. Java 代码实现** ```java public class HalfToFullWidthConverter { public static String convertHalfToFullWidth(String halfWidthStr) { StringBuilder fullWidthStr = new StringBuilder(); for (char c : halfWidthStr.toCharArray()) { // 处理半角空格 if (c == ' ') { fullWidthStr.append(' '); // 全角空格 continue; } // 处理可偏移字符(数字、字母、符号) if (c >= '!' && c <= '~') { // ASCII 可打印字符范围(半角) int unicode = c + 65248; // 偏移量 fullWidthStr.append((char) unicode); } else { fullWidthStr.append(c); // 其他字符保留原样 } } return fullWidthStr.toString(); } public static void main(String[] args) { String input = "Hello 123! @测试"; String output = convertHalfToFullWidth(input); System.out.println("换前: " + input); System.out.println("换后: " + output); } } ``` --- ### **3. 示例输出** ``` 换前: Hello 123! @测试 换后: Hello 123! @测试 ``` - **字母/数字/符号**:换为全角(如 `H` → `H`,`1` → `1`,`!` → `!`) - **空格**:半角空格 ` ` → 全角空格 ` ` - **汉字**:保留原样(如 `测试`) --- ### **4. 注意事项** #### **(1) 符号覆盖范围** - 代码中 `c >= '!' && c <= '~'` 覆盖了常见半角符号(如 `!`, `@`, `#` 等),但需注意: - **例外符号**:如半角反斜杠 `\` (`U+005C`) 换后为 `\` (`U+FF3C`),而非中文顿号 `、` - **需手动映射**:特殊符号(如 `$` → `$`)需要单独处理。 #### **(2) 性能优化** - 使用 `StringBuilder` 代替字符串拼接,避免频繁创建对象。 #### **(3) 第三方库** - **Apache Commons Lang**:可用 `StringUtils` 结合自定义逻辑扩展。 - **ICU4J**:专业的 Unicode 处理库,支持更复杂的字符换。 --- ### **5. 扩展场景** #### **(1) 全角半角** 反向操作需减去偏移量 `65248`,并处理全角空格: ```java if (c == ' ') { // 全角空格 fullWidthStr.append(' '); } ``` #### **(2) 严格过滤** 若需仅保留全角字符,可增加校验逻辑: ```java if (Character.UnicodeBlock.of(c) == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) { // 全角字符处理 } ``` --- ### **总结** 通过 Unicode 编码偏移实现半角全角,核心是**控制字符范围并处理空格**。此方法适用于数字、字母和常见符号的换,特殊场景需补充映射规则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值