当前位置: 首页 > article >正文

Java——Character

Character1、Unicode基础2、检查code point和char3、code point与char的转换4、按code point处理char数组或序列5、字符属性6、字符转换1、Unicode基础Unicode给世界上每个字符分配了一个编号编号范围为0x0000000x10FFFF。编号范围在0x00000xFFFF的字符为常用字符集称BMPBasic MultilingualPlane字符。编号范围在0x100000x10FFFF的字符叫做增补字符supplementary character​。Unicode主要规定了编号但没有规定如何把编号映射为二进制。UTF-16是一种编码方式或者叫映射方式它将编号映射为两个或4个字节对BMP字符它直接用两个字节表示对于增补字符使用4个字节表示前两个字节叫高代理项high surrogate​范围为0xD800 0xDBFF后两个字节叫低代理项low surrogate​范围为0xDC000xDFFF。UTF-16定义了一个公式可以将编号与4字节表示进行相互转换。Java内部采用UTF-16编码char表示一个字符但只能表示BMP中的字符对于增补字符需要使用两个char表示一个表示高代理项一个表示低代理项。使用int可以表示任意一个Unicode字符低21位表示Unicode编号高11位设为0。整数编号在Unicode中一般称为代码点code point​表示一个Unicode字符与之相对还有一个词代码单元code unit表示一个char。2、检查code point和char//判断一个int是不是一个有效的代码点小于等于0x10FFFF的为有效大于的为无效publicstaticbooleanisValidCodePoint(intcodePoint)//判断一个int是不是BMP字符小于等于0xFFFF的为BMP字符大于的不是publicstaticbooleanisBmpCodePoint(intcodePoint)//判断一个int是不是增补字符0x0100000X10FFFF为增补字符publicstaticbooleanisSupplementaryCodePoint(intcodePoint)//判断char是否是高代理项0xD8000xDBFF为高代理项publicstaticbooleanisHighSurrogate(charch)//判断char是否为低代理项0xDC000xDFFF为低代理项publicstaticbooleanisLowSurrogate(charch)//判断char是否为代理项 char为低代理项或高代理项则返回truepublicstaticbooleanisSurrogate(charch)//判断两个字符high和low是否分别为高代理项和低代理项publicstaticbooleanisSurrogatePair(charhigh,charlow)//判断一个代码点由几个char组成增补字符返回2, BMP字符返回1publicstaticintcharCount(intcodePoint)3、code point与char的转换除了简单的检查外Character类中还有很多方法进行code point与char的相互转换。//根据高代理项high和低代理项low生成代码点这个转换有个公式这个方法封装了这个公式publicstaticinttoCodePoint(charhigh,charlow)//根据代码点生成char数组即UTF-16表示如果code point为BMP字符则返回的char//数组长度为1如果为增补字符长度为2, char[0]为高代理项char[1]为低代理项publicstaticchar[]toChars(intcodePoint)//将代码点转换为char数组与上面方法类似只是结果存入指定数组dst的指定位置indexpublicstaticinttoChars(intcodePoint,char[]dst,intdstIndex)//对增补字符code point生成低代理项publicstaticcharlowSurrogate(intcodePoint)//对增补字符code point生成高代理项publicstaticcharhighSurrogate(intcodePoint)4、按code point处理char数组或序列Character包含若干方法以方便按照code point处理char数组或序列。返回char数组a中从offset开始count个char包含的code point个数publicstaticintcodePointCount(char[]a,intoffset,intcount)比如如下代码输出为2, char个数为3但code point为2。char[]chsnewchar[3];chs[0]马;Character.toChars(0x1FFFF,chs,1);System.out.println(Character.codePointCount(chs,0,3));除了接受char数组还有一个重载的方法接受字符序列CharSequencepublicstaticintcodePointCount(CharSequenceseq,intbeginIndex,intendIndex)CharSequence是一个接口它的定义如下所示publicinterfaceCharSequence{intlength();charcharAt(intindex);CharSequencesubSequence(intstart,intend);publicStringtoString();}它与一个char数组是类似的有length方法有charAt方法根据索引获取字符String类就实现了该接口。返回char数组或序列中指定索引位置的code pointpublicstaticintcodePointAt(char[]a,intindex)publicstaticintcodePointAt(char[]a,intindex,intlimit)publicstaticintcodePointAt(CharSequenceseq,intindex)如果指定索引位置为高代理项下一个位置为低代理项则返回两项组成的code point检查下一个位置时下一个位置要小于limit没传limit时默认为a.length。返回char数组或序列中指定索引位置之前的code pointpublicstaticintcodePointBefore(char[]a,intindex)publicstaticintcodePointBefore(char[]a,intindex,intstart)publicstaticintcodePointBefore(CharSequenceseq,intindex)codePointAt是往后找codePointBefore是往前找如果指定位置为低代理项且前一个位置为高代理项则返回两项组成的code point检查前一个位置时前一个位置要大于等于start没传start时默认为0。根据code point偏移数计算char索引publicstaticintoffsetByCodePoints(char[]a,intstart,intcount,intindex,intcodePointOffset)publicstaticintoffsetByCodePoints(CharSequenceseq,intindex,intcodePointOffset)如果字符数组或序列中没有增补字符返回值为indexcodePointOffset如果有增补字符则会将codePointOffset看作code point偏移转换为字符偏移start和count取字符数组的子数组。比如如下代码char[]chsnewchar[3];Character.toChars(0x1FFFF,chs,1);System.out.println(Character.offsetByCodePoints(chs,0,3,1,1));输出结果为3,index和codePointOffset都为1但第二个字符为增补字符一个code point偏移是两个char偏移所以结果为3。5、字符属性Unicode在给每个字符分配一个编号之外还分配了一些属性Character类封装了对Unicode字符属性的检查和操作下面介绍一些主要的属性。获取字符类型general category​publicstaticintgetType(intcodePoint)publicstaticintgetType(charch)Unicode给每个字符分配了一个类型这个类型是非常重要的很多其他检查和操作都是基于这个类型的。getType方法的参数可以是int类型的code point也可以是char类型。char类型只能处理BMP字符而int类型可以处理所有字符。Character类中很多方法都是既可以接受int类型也可以接受char类型后续只列出int类型的方法。返回值是int表示类型Character类中定义了很多静态常量表示这些类型下表列出了一些字符、type值以及Character类中常量的名称。字符type值常量名称A1UPPERCASE_LEFTERa2LOWERCASE_LEFTER马5OTHER_LETTER19DECIMAL_DIGIT_NUMBER15SPACE_SEPARATOR\n15CONTROL-20DASH_PUNCTUATION{21START_PUCNTUATION_23CONNECTOR_PUNCTUATION24OTHER_PUNCTUATION25MATH_SYMBOL26CURRENCY_SYMBOL检查字符是否在Unicode中被定义publicstaticbooleanisDefined(intcodePoint)每个被定义的字符其getType()返回值都不为0如果返回值为0表示无定义。注意与isValidCodePoint的区别后者只要数字不大于0x10FFFF都返回true。检查字符是否为数字publicstaticbooleanisDigit(intcodePoint)getType()返回值为DECIMAL_DIGIT_NUMBER的字符为数字。需要注意的是不光字符’0’、‘1’、……、9’是数字中文全角字符的09也是数字。比如charch9;//中文全角数字System.out.println((int)ch, Character.isDigit(ch));输出为65305,true全角字符的9, Unicode编号为65305它也是数字。检查是否为字母Letter​publicstaticbooleanisLetter(intcodePoint)如果getType()的返回值为下列之一则为LetterUPPERCASE_LETTER LOWERCASE_LETTER TITLECASE_LETTER MODIFIER_LETTER OTHER_LETTER除了TITLECASE_LETTER和MODIFIER_LETTER其他在表中有示例而这两个平时碰到的也比较少就不介绍了。只要其中之一返回true就返回true。检查是否为字母Alphabetic​publicstaticbooleanisAlphabetic(intcodePoint)这也是检查是否为字母与isLetter的区别是isLetter返回true时isAlphabetic也必然返回true此外getType()值为LETTER_NUMBER时isAlphabetic也返回true而isLetter返回false。LETTER_NUMBER中常见的字符有罗马数字字符如’I’、‘Ⅱ’、‘Ⅲ’、‘Ⅳ’。检查是否为空格字符publicstaticbooleanisWhitespace(intcodePoint)‘\t’、‘\n’、全角空格’ ‘和半角空格’ 的返回值都为true。检查是否为小写字符publicstaticbooleanisLowerCase(intcodePoint)常见的小写字符主要是小写英文字母az。检查是否为大写字符publicstaticbooleanisUpperCase(intcodePoint)常见的大写字符主要是大写英文字母AZ。检查是否为表意象形文字publicstaticbooleanisIdeographic(intcodePoint)大部分中文都返回为true。检查是否为ISO 8859-1编码中的控制字符publicstaticbooleanisISOControl(intcodePoint)我们在第2章介绍过031、127159表示控制字符。检查是否可作为Java标识符的第一个字符publicstaticbooleanisJavaIdentifierStart(intcodePoint)Java标识符是Java中的变量名、函数名、类名等字母Alphabetic​、美元符号$​、下画线_可作为Java标识符的第一个字符但数字字符不可以。检查是否可作为Java标识符的中间字符publicstaticbooleanisJavaIdentifierPart(intcodePoint)相比isJavaIdentifierStart主要多了数字字符Java标识符的中间字符可以包含数字。检查是否为镜像mirrowed字符publicstaticbooleanisMirrored(intcodePoint)常见镜像字符有( )、{ }、 、​[ ]​都有对应的镜像。6、字符转换Unicode除了规定字符属性外对有大小写对应的字符还规定了其对应的大小写对有数值含义的字符也规定了其数值。我们先来看大小写Character有两个静态方法对字符进行大小写转换publicstaticinttoLowerCase(intcodePoint)publicstaticinttoUpperCase(intcodePoint)这两个方法主要针对英文字符az和AZ例如toLowerCase(‘A’)返回’a’, toUpper-Case(‘z’)返回’Z’。返回一个字符表示的数值publicstaticintgetNumericValue(intcodePoint)字符’0’’9’返回数值09对于字符az无论是小写字符还是大写字符无论是普通英文还是中文全角数值结果都是1035。例如如下代码的输出结果是一样的都是10。System.out.println(Character.getNumericValue(A));//全角大写ASystem.out.println(Character.getNumericValue(A));System.out.println(Character.getNumericValue(a));//全角小写aSystem.out.println(Character.getNumericValue(a));返回按给定进制表示的数值publicstaticintdigit(intcodePoint,intradix)radix表示进制常见的有二进制、八进制、十进制、十六进制计算方式与get-NumericValue类似只是会检查有效性数值需要小于radix如果无效返回-1。例如digit(‘F’,16)返回15是有效的但digit(‘G’,16)就无效返回-1。返回给定数值的字符形式publicstaticcharforDigit(intdigit,intradix)与digit(int codePoint, int radix)相比进行相反转换如果数字无效返回’\0’。例如 Character.forDigit(15,16)返回’F’。与Integer类似Character也有按字节翻转publicstaticcharreverseBytes(charch)例如翻转字符0x1234System.out.println(Integer.toHexString(Character.reverseBytes((char)0x1234)));输出为3412。

相关文章:

Java——Character

Character1、Unicode基础2、检查code point和char3、code point与char的转换4、按code point处理char数组或序列5、字符属性6、字符转换1、Unicode基础 Unicode给世界上每个字符分配了一个编号,编号范围为0x000000~0x10FFFF。编号范围在0x0000&#xff…...

IntelliNode:统一AI模型调用,加速Node.js智能应用开发

1. 项目概述:从IntelliNode到智能应用开发的新范式最近在开源社区里,一个名为“IntelliNode”的项目引起了我的注意,更具体地说,是它的核心库intelligentnode/Intelli。乍一看这个名字,你可能会联想到“智能节点”&…...

从图文到视频:用 Python 打造公众号文章自动化转视频号的爆款流水线

摘要:本文详解一套完全基于开源工具(Python + edge-tts + ffmpeg)的自动化系统,可将任意微信公众号文章一键转换为横屏/竖屏视频,直接用于视频号分发。全程无需剪辑软件、无需出镜、无需复杂配置,5 分钟部署,1 条命令生成专业级视频。 🔥 为什么你需要这个? 在 AIGC…...

3步终极指南:用开源TCC-G15彻底解决Dell G15散热难题

3步终极指南:用开源TCC-G15彻底解决Dell G15散热难题 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 你是否正在为Dell G15笔记本的过热问题而烦恼…...

SIGTRAN协议:电信网络IP化的关键技术解析

1. SIGTRAN:下一代电信网络的信令传输基石2003年全球电信业寒冬中,一个技术决策正在悄然改变行业格局。当运营商们紧缩资本开支时,AT&T、Verizon等巨头却不约而同地加大了对IP网络的投入。这背后隐藏着一个关键技术转折——传统TDM网络向…...

大厂光环褪去后,技术人该如何评估一份工作的价值?

当“进入大厂”不再是职业发展的唯一解,当“稳定”成为一种奢求,软件测试从业者需要一套更内核的价值评估体系。这套体系不应依赖于公司的名头或短期的薪资涨幅,而应聚焦于那些能够被你带走、并持续产生复利的核心资产。我们可以从以下四个维…...

别再只跟 AI 聊天了,教它干活才是正经事

摘要大模型只会聊天?那你可能用错了方式。函数调用让 AI 从"说"变成"做",能真正执行任务。本文分享我搭建 AI Agent 的实战经验,包括工具设计、参数校验、错误处理等核心环节,帮你避开那些我踩过的坑。开篇引…...

从UHS-II到DDR4:2014年存储技术演进与工程实践启示

1. 项目概述:一次2014年秋的存储技术快照九月的风刚带起一丝凉意,存储半导体领域却热闹非凡。作为一名长期跟踪硬件发展的从业者,我习惯定期梳理行业动态,而2014年9月这份来自EE Times的“Memory Product Round Up”产品汇总&…...

半导体产业3000亿美元背后的冷思考:成本高墙、利润悖论与创新挑战

1. 行业现状:跨越3000亿美元门槛后的冷思考 又到了一年一度回顾过去、展望未来的时刻。对于我们这些在半导体行业摸爬滚打了十几年甚至几十年的老工程师来说,每年的这个时候心情总是复杂的。今年有个标志性的消息:全球半导体产业营收终于再次…...

FPGA LVDS输入作为模拟比较器的原理、设计与工程实践

1. 项目概述:当LVDS输入遇上模拟电压 最近几年,各大FPGA厂商都在力推自家的“模拟-数字转换器(ADC)IP核”,宣传其如何集成便利、性能优越。这让我这个老工程师不禁琢磨,这些IP核的底层原理究竟是什么&#…...

工程师实战指南:从原理到选型,全面解析电池核心技术参数与应用

1. 项目概述:为什么我们需要重新认识电池?干了三十多年电气工程,从数字电路、模拟信号到电源设计、通信协议和微控制器,我几乎把电子行业的各个角落都摸了一遍。现在我在一家叫MaxVision的公司,专门搞那种性能极端、皮…...

数字时代的计划性抹杀:从强制升级到生态锁定的技术围剿

1. 数字时代的“计划性报废”:从凯迪拉克到小电驴的隐喻 前几天,我在网上申请一张信用卡,过程堪称一场荒诞剧。银行明明通过邮件联系我,也知道我的账号密码,甚至在我通过了“我不是机器人”的图片验证后,却…...

超高清电视普及困境解析:从技术参数到生态系统的完整思考

1. 超高清电视的“非主流”开局:一场始于2013年的行业迷思 如果你在2013年初的拉斯维加斯CES展上,听到关于“Ultra HDTV”(超高清电视,后文简称UHDTV)的喧嚣,感觉就像身处一场盛大的交响乐彩排现场——乐手…...

5分钟掌握FanControl:Windows风扇控制的终极免费解决方案

5分钟掌握FanControl:Windows风扇控制的终极免费解决方案 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending…...

内向技术人突破领导力瓶颈:从深度思考到战略沟通的进阶指南

1. 项目概述:内向工程师的“天花板”与破局之路 在技术圈子里待久了,你会发现一个有趣的现象:身边那些能写出精妙算法、搞定复杂架构的工程师,往往在茶水间的闲聊中显得沉默寡言,在大型会议上也更倾向于坐在后排。这并…...

Keep架构深度解析:企业级AIOps告警管理平台的设计与实践

Keep架构深度解析:企业级AIOps告警管理平台的设计与实践 【免费下载链接】keep The open-source AIOps and alert management platform 项目地址: https://gitcode.com/GitHub_Trending/kee/keep Keep作为开源AIOps告警管理平台,采用现代化的微服…...

CANdela Studio配置避坑指南:从10服务到Data Type,这些细节别踩雷

CANdela Studio配置避坑指南:从10服务到Data Type,这些细节别踩雷 在汽车电子诊断功能开发中,CANdela Studio作为诊断数据库(CDD)的核心编辑工具,其配置精度直接影响着诊断协议栈的生成质量。许多工程师能够完成基础配置&#xff…...

iOSDeviceSupport终极指南:如何快速解决Xcode设备支持文件缺失问题

iOSDeviceSupport终极指南:如何快速解决Xcode设备支持文件缺失问题 【免费下载链接】iOSDeviceSupport All versions of iOS Device Support 项目地址: https://gitcode.com/gh_mirrors/ios/iOSDeviceSupport 你是否曾经在iOS开发中遇到过这样的困扰&#xf…...

51单片机项目进阶:给电子秤加上JQ8400语音播报,一线串口控制到底有多方便?

51单片机电子秤语音播报模块深度实战:从JQ8400-FL选型到一线串口控制全解析 当你已经完成基础电子秤项目,能够准确显示重量并计算价格时,如何让这个设备"会说话"?语音交互功能的加入不仅能提升用户体验,更能…...

Antigravity AI 助手“装死”?一招解决 Git 配置引发的无响应崩溃

我们在使用 Antigravity AI IDE 进行开发时,有时会遇到一个令人头疼的现象:在对话框输入任何 Prompt 后,AI 助手仿佛“装死”一般毫无反应。没有生成提示,也没有错误弹窗,即使重启 IDE 或清理对话历史也无济于事。这不…...

Super IO插件终极指南:5分钟掌握Blender文件处理革命

Super IO插件终极指南:5分钟掌握Blender文件处理革命 【免费下载链接】super_io blender addon for copy paste import / export 项目地址: https://gitcode.com/gh_mirrors/su/super_io Super IO是一款彻底改变Blender工作流程的革命性插件,它通…...

从B站视频到跑通代码:手把手复现大疆C板控制M2006电机的完整流程(STM32CubeMX + C610电调)

大疆C板驱动M2006电机全流程解析:从CubeMX配置到CAN通信实战 第一次拿到大疆RoboMaster C板时,看着官方文档和一堆外设确实有点无从下手。特别是当需要控制M2006这种高性能电机时,文档中的信息分散在不同章节,而社区里的完整教程又…...

2026论文降AI实战SOP:保留排版格式,8款工具与结构级优化指南

内容ai率检测数值太高,不得不熬夜改了一遍又一遍,润色到想吐,结果检测报告上数字还是不尽人意,截止日期越逼越近,真的是没办法了。 我花了整整三天,把2026全网热门的几十款降AI工具通通测了个遍&#xff0…...

【2026实测】论文AI率从81%降至个位数?8款降AIGC工具深度横测

内容ai率检测数值太高,不得不熬夜改了一遍又一遍,润色到想吐,结果检测报告上数字还是不尽人意,截止日期越逼越近,真的是没办法了。 我花了整整三天,把2026全网热门的几十款降AI工具通通测了个遍&#xff0…...

FPGA边缘视觉方案解析:从芯片选型到多传感器融合实战

1. 项目概述:单芯片FPGA嵌入式视觉与融合分析方案 最近在梳理一些老项目的技术文档时,翻到了Altera(现在已是Intel PSG的一部分)和Eutecus在2015年左右合作推出的一套方案,当时在EE Times上被称作“Single-Chip FPGA-B…...

从怀疑到信服:VR如何从娱乐玩具进化为现实增强工具

1. 从怀疑到信服:一个技术怀疑论者的VR认知重塑之旅我不是那种会第一时间冲进苹果店排队买最新款手机的人,甚至可以说,我对新科技抱有一种近乎“卢德主义”的警惕。每当有新的技术浪潮涌来,我的第一反应不是兴奋,而是审…...

6自由度KUKA机械臂自主抓取系统:ROS架构设计与逆运动学技术实现深度解析

6自由度KUKA机械臂自主抓取系统:ROS架构设计与逆运动学技术实现深度解析 【免费下载链接】pick-place-robot Object picking and stowing with a 6-DOF KUKA Robot using ROS 项目地址: https://gitcode.com/gh_mirrors/pi/pick-place-robot 在工业自动化领…...

企业如何通过API Key管理与审计日志保障大模型调用安全

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 企业如何通过API Key管理与审计日志保障大模型调用安全 对于将大模型能力集成到业务流程中的企业而言,安全与合规是首要…...

如何在Windows电脑上轻松安装安卓应用:5步完成轻量级跨平台部署

如何在Windows电脑上轻松安装安卓应用:5步完成轻量级跨平台部署 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否想在Windows电脑上运行安卓应用&…...

数说故事解读AI品牌心智:让品牌被AI看见、推荐与信任

当AI全面进入商业决策、智能体成为企业标配,品牌增长逻辑正在发生底层重构:品牌不再只是面对消费者,更需要被AI识别、理解、推荐与信任。数说故事在2026 D3智慧增长大会上提出全新观点——AI品牌心智,将成为AI共生时代品牌最重要的…...