如何替换java字符串中的字符?

2024-02-25

我喜欢以有效的方式用相应的替换字符替换字符串中的某些字符。

例如:

String sourceCharacters = "šđćčŠĐĆČžŽ";
String targetCharacters = "sdccSDCCzZ";

String result = replaceChars("Gračišće", sourceCharacters , targetCharacters );

Assert.equals(result,"Gracisce") == true;

有没有比使用更有效的方法replaceAllString类的方法?

我的第一个想法是:

final String s = "Gračišće";
String sourceCharacters = "šđćčŠĐĆČžŽ";
String targetCharacters = "sdccSDCCzZ";

// preparation
final char[] sourceString = s.toCharArray();
final char result[] = new char[sourceString.length];
final char[] targetCharactersArray = targetCharacters.toCharArray();

// main work
for(int i=0,l=sourceString.length;i<l;++i)
{
  final int pos = sourceCharacters.indexOf(sourceString[i]);
  result[i] = pos!=-1 ? targetCharactersArray[pos] : sourceString[i];
}

// result
String resultString = new String(result);

有任何想法吗?

顺便说一句,UTF-8 字符引起了麻烦,而使用 US_ASCII 则工作正常。


您可以利用java.text.Normalizer http://java.sun.com/javase/6/docs/api/java/text/Normalizer.html和一个正则表达式来摆脱变音符号 http://en.wikipedia.org/wiki/Diacritic其中存在much比您迄今为止收集的还要多。

这是一个SSCCE http://sscce.org,在 Java 6 上复制、粘贴并运行它:

package com.stackoverflow.q2653739;

import java.text.Normalizer;
import java.text.Normalizer.Form;

public class Test {

    public static void main(String... args) {
        System.out.println(removeDiacriticalMarks("Gračišće"));
    }

    public static String removeDiacriticalMarks(String string) {
        return Normalizer.normalize(string, Form.NFD)
            .replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
    }
}

这应该会产生


Gracisce  

至少,在 Eclipse 中,控制台字符编码设置为 UTF-8 (窗口 > 首选项 > 常规 > 工作区 > 文本文件编码)。确保您的环境中也进行了相同的设置。

作为替代方案,保持Map<Character, Character>:

Map<Character, Character> charReplacementMap = new HashMap<Character, Character>();
charReplacementMap.put('š', 's');
charReplacementMap.put('đ', 'd');
// Put more here.

String originalString = "Gračišće";
StringBuilder builder = new StringBuilder();

for (char currentChar : originalString.toCharArray()) {
    Character replacementChar = charReplacementMap.get(currentChar);
    builder.append(replacementChar != null ? replacementChar : currentChar);
}

String newString = builder.toString();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何替换java字符串中的字符? 的相关文章

  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • 以编程方式将字符串宽度值插入到 sprintf() 中

    我正在尝试以编程方式将字符串宽度值插入到sprintf 格式 期望的结果是 sprintf 20s hello 1 hello 但我想插入20在同一通话中即时进行 因此它可以是任何号码 我努力了 sprintf ds 20 hello 1
  • 从字符串末尾删除多个字符类型

    我有一个构建地址字段的循环 其中一些字段在字符串末尾可能为空 List
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • Spark 1.3.1 上的 Apache Phoenix(4.3.1 和 4.4.0-HBase-0.98)ClassNotFoundException

    我正在尝试通过 Spark 连接到 Phoenix 并且在通过 JDBC 驱动程序打开连接时不断收到以下异常 为简洁起见 下面是完整的堆栈跟踪 Caused by java lang ClassNotFoundException org a
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • 正则表达式 - 从 markdown 字符串中提取所有标题

    我在用灰质 https www npmjs com package gray matter 以便将文件系统中的 MD 文件解析为字符串 解析器产生的结果是这样的字符串 n Clean er ReactJS Code Conditional
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • 如何从泛型类调用静态方法?

    我有一个包含静态创建方法的类 public class TestClass public static
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

  • Mongomapper 数组的多对多问题

    我想从用户的任务列表中列出用户的所有任务名称 但是当我使用下面的代码时 我收到以下消息 undefined method task id for 这是我的课程 class User include MongoMapper Document
  • 共享表 - 排除未作为 UIActivityType 中的类型属性提供的选项

    我想排除Add to iCloud Drive Add to Reading List Save to Files Print来自共享表 我可以使用以下代码排除 添加到阅读列表 和 打印 选项 因为这些类型属性 https develope
  • 如何实现论坛权限

    我已经开始在 MVC 框架上用 PHP 开发论坛应用程序 并且已经到了向成员分配权限的阶段 例如 读取 写入 更新 删除 现在 我知道我可以在数据库的用户表下添加 5 列并将它们设置为 1 0 但如果我想添加其他规则 例如 MOVE 这对我
  • 如何使 tkinter 窗口在 i3 windowmanager 中浮动

    我只是在 python 中玩了一下 tkinter 但是我的 i3 平铺 窗口管理器遇到了一些 麻烦 我想创建一个浮动窗口来输入值 类似于 打开文件 对话框 这一定是可能的 因为 Gimp 也可以在 i3 中使用浮动窗口 当然 我不确定 t
  • Java 中的内联比较器与自定义比较器

    对列表进行排序时 使用内联 java Comparator 带有匿名内部类 与实现单独的自定义 Comparator 类之间是否存在性能差异 1 public class SortByErrorComparator implements C
  • 如何在同一浏览器实例中运行多个测试方法而不关闭它(C#、Selenium WebDriver NUnit)?

    我是 c 和 Selenium 的初学者 我想知道是否可以在同一浏览器实例中运行多个 TestMethod s 而无需关闭它 例如 Can Change Name And Title 完成后 我想继续 Can Change Profile
  • 如何从命令行将每两行合并为一行?

    我有一个具有以下格式的文本文件 第一行是 KEY 第二行是 VALUE KEY 4048 1736 string 3 KEY 0 1772 string 1 KEY 4192 1349 string 1 KEY 7329 2407 stri
  • 调整画布图像大小

    我正在尝试上传图像并将它们放入不同大小的盒子中 为了让您了解该应用程序的功能 人们上传图像并将它们打印到海报上 例如 我们的海报尺寸为 8 x 10 活动区域 完整尺寸为 9 5 x 11 5 由于最小 DPI 为 100 我们通常将 8x
  • MTKView - 调整纹理大小以填充视图

    我对 Metal 很陌生 但正在努力遵循 Apple 的规定AVCam滤镜 https developer apple com documentation avfoundation cameras and media capture avc
  • React Native:如何正确输入嵌套导航器?

    情况 正如您可能知道的那样 我目前正在构建一个有声读物播放器 多么有创意 这是我第一个针对反应原生和打字稿的更大项目 在正确输入导航方面我有点挣扎 首先 这是一个快速概述 疑问 问题 感觉我使用了太多嵌套导航器 但由于我没有任何经验 所以很
  • Eclipse 无法运行,JVM 终止退出代码-13 [重复]

    这个问题在这里已经有答案了 大家好 无法运行 Eclipse JVM 终止 退出代码 13 我有一个问题 如图所示 当我在我的电脑中打开 Ecllipse 时出现 任何人遇到这个问题并有解决方案吗 请帮助我 提前致谢 看看这里 无法运行 E
  • Firebase 身份验证 Web:如何验证电子邮件地址

    我是 Firebase 网络身份验证新手 我设法使注册表单正常工作 但在发送电子邮件以验证用户的电子邮件地址时遇到问题 用户已正常创建并显示在我的控制台中 但未发送验证电子邮件 并且 我在 Chrome 中收到以下错误 未捕获的类型错误 无
  • 如何使用 pysftp 将字符串写入 ftp 文件?

    我有一个大的 xml 文件存储在变量中 我想使用 pysftp 将其直接写入 ftp 我相信我需要使用 pysftp putfo 这需要一个类似文件的对象 这是一个最小的例子 from io import StringIO from pys
  • Azure Functions - 使用 appsettings.json

    是否可以在 Azure Functions 中使用 appsettings json 文件 这里有环境变量的文档 https learn microsoft com en us azure azure functions functions
  • DOMDocument 简单的 GetElementsByTagName 不起作用?

    xml
  • Pandas groupby 和 qcut

    有没有一种方法可以构造 Pandas groupby 和 qcut 命令以返回具有嵌套图块的一列 具体来说 假设我有 2 组数据 并且我希望将 qcut 应用于每组 然后将输出返回到一列 这类似于允许 Partition by 的 MS S
  • 如何在部分回发时保留脚本块?

    这是我目前正在开发的网络应用程序中遇到的问题 因此 我没有用不相关的代码来混淆问题 而是在一个孤立的 简化的 Web 应用程序中重新创建了该问题 该应用程序仅演示了此问题 希望这有助于找到解决方案 我有一个网络用户控件 其内容如下
  • 从xcode中的其他目录导入文件

    我有以下目录结构 A B C D E F G 我有 A 目录 其下有 B 和 E 在 B 中 我有 C 和 D 文件 在 E 中我有 F 和 G 文件 我正在处理 G 文件 我需要导入 D 文件 我怎么做 如果我直接写 import G h
  • Rails 中的范围/named_scope 是什么?

    我最近开始实习了 我的雇主在 Rails 上使用 ruby 我经常遇到需要查找才能理解的新语法 我在谷歌上搜索了named scope的一个很好的解释 但到目前为止我发现的大部分是对它给予高度赞扬的博客文章 而不是直接的定义或介绍 ruby
  • 如何替换java字符串中的字符?

    我喜欢以有效的方式用相应的替换字符替换字符串中的某些字符 例如 String sourceCharacters String targetCharacters sdccSDCCzZ String result replaceChars Gr