Java:在动态索引位置插入字符串,其中索引是格式化字符串

2024-03-27

我的字符串格式如下:

{a},{b2},{str},{5}...

{a} - index[0], {b2} - index[1],(str} - index[2],{5} - index[3] ...

这可能超过 20K 或 25K 索引。甚至达到1L。

我想在任何位置插入字符串“{c3}”,它是动态的(例如第三个) 结果应该是这样的

{a},{b2},{str},{c3},{5}

这是一个非常频繁的操作,不在控制台应用程序中使用。它适用于面向网络的应用程序。那么java中处理这个问题的更好方法是什么?

使用 split 方法,我们必须使用 System.arraycopy 来处理它。对于性能方面来说,有点困难。

所以请建议我如何在正则表达式中处理这个问题。还指导我这是否是处理它的好方法或告诉我是否有更好的方法?


感谢您的快速回复。

是的,这是解决我的问题的方法之一。

我会清楚地解释我的问题。

我从文件存储中读取文件内容,最终得到如下内容:{a},{b2},{str},{5}...

在该字符串中,我必须在特定索引处插入一些内容(索引基于 {}),然后必须将其存储到文件存储中。

对我来说,阅读和写作不是问题。我们会处理的。

插入特定索引只是问题。频繁访问时服务器服务是否良好

还有一些疑问:

假设字符串有超过 25K 的索引,在这种情况下 while 循环将执行 25k 次。

插入是频繁操作,一分钟可以点击50次以上。(50*25=1250K)

假设25个用户进入同一个服务器,那么是否可以很好地服务?

我不知道哪种方式更好。你们的型号是否适合我的情况?

请建议我...


正则表达式实际上可能比显式解析您需要的内容慢。所需的表达式可能也有点复杂。这是不需要大型数组的替代方案:

String input = "{a},{b2},{str},{5}";
int insertPos = 3;
String insertText = "{c3}";

StringBuilder sb = new StringBuilder();
int pos = 0;
Scanner scanner = new Scanner(input).useDelimiter(",");
while (scanner.hasNext()) {
    String next = scanner.next();
    if (pos++ == insertPos) {
        sb.append(insertText);
        sb.append(',');
    }
    sb.append(next);
    sb.append(',');
}
sb.deleteCharAt(sb.length() - 1); // remove the last comma
String output = sb.toString(); // output will be "{a},{b2},{str},{c3},{5}"

我不确定您的用例是什么,但是您可以根据需要进行调整以处理更多插入。

Edit:这是一个速度快 50 倍的版本。给定每个具有 50K 索引的字符串,在典型硬件上,它可以在单个线程中每分钟处理大约 100K 输入字符串(因此每分钟 50 亿个索引)。

String input = "{a},{b2},{str},{5}";
int insertPos = 3;
String insertText = "{c3}";

String output = input + ","; // add temporary comma
int index = 0;
int pos = 0;
while (index > -1) {
    if (pos == insertPos) {
        output = output.substring(0, index)
                + (pos == 0 ? insertText + "," : "," + insertText)
                + output.substring(index);
    }
    index = output.indexOf(',', index + 1);
    pos++;
}
output = output.substring(0, output.length() - 1); // remove last comma
System.out.println(output); // output will be "{a},{b2},{str},{c3},{5}"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java:在动态索引位置插入字符串,其中索引是格式化字符串 的相关文章

  • 在Windows Server 2003下如何在本地系统帐户下运行jvisualvm.exe?

    我在带有 Java 1 6 u 20 的 Windows Server 2003 下将 GlassFish 3 0 1 作为 Windows 服务运行 总体上我很满意 我希望能够在这个 JVM 上使用 VisualVM 并使用无法在 Tom
  • 连接外部 Accumulo 实例和 java

    我正在尝试使用 Accumulo 连接到虚拟机 问题是 我无法将其连接到 Java 中 我可以看到 Apache 抛出的网页 但我无法让它与代码一起工作 我认为这是缺乏知识的问题而不是真正的问题 但我找不到这方面的文档 所有示例都使用 lo
  • java程序有多少种结束方式?

    我知道使用 System exit 0 可以结束一个java程序 例如 如果我有一个JFrame窗口 它会关闭并结束程序 但我想知道还有多少其他方法 可以关闭它并结束程序 包括发生错误时 程序会被关闭 JFrame也会被关闭吗 添加到其他答
  • 查看Java Agent修改的Java类的源代码

    我需要了解 Java 代理如何修改我的初始类 以便我能够理解代码的作用 build gradle configurations jar archiveName agent2 jar jar manifest attributes Prema
  • 我们可以有条件地声明 spring bean 吗?

    有没有一种方法可以有条件地声明 Spring bean 例如
  • 有人用过 ServiceLoader 和 Guice 一起使用吗?

    我一直想通过我们的应用程序 构建系统进行更大规模的尝试 但更高的优先级不断将其推到次要地位 这似乎是加载 Guice 模块的好方法 并且避免了关于 硬编码配置 的常见抱怨 单个配置属性很少会自行更改 但您几乎总是会有一组配置文件 通常用于不
  • 无法使用 datastax java 驱动程序通过 UDT 密钥从 cassandra 检索

    我正在尝试使用用户定义的类型作为分区键将对象存储在 cassandra 中 我正在使用 datastax java 驱动程序进行对象映射 虽然我能够插入到数据库中 但无法检索该对象 如果我更改分区键以使用非 udt 例如文本 我就能够保存和
  • getCurrentSession 在网络中休眠

    我正在使用 hibernate 和 jsp servlet 编写一个基于 Web 的应用程序 我读过有关sessionFactory getCurrentSession and sessionFactory openSession方法 我知
  • ThreeTen 向后移植与 JSR-310 的比较

    由于某些原因 我们现在无法使用 java 8 我们仍然停留在 java 7 上 不过 我想使用新的JSR 310 date time APIs现在 使用官方向后移植 ThreeTen http www threeten org threet
  • 无需递归即可对可观察结果进行分页 - RxJava

    我有一个非常标准的 API 分页问题 您可以通过一些简单的递归来处理 这是一个捏造的例子 public Observable
  • 数据库中的持久日期不等于检索日期

    我有一个具有 Date 属性的简单实体类 此属性对应于 MySQL 日期时间列 Entity public class Entity Column name start date Temporal TemporalType TIMESTAM
  • Joshua Bloch 的构建器设计模式有何改进?

    早在 2007 年 我就读过一篇关于 Joshua Blochs 所采用的 构建器模式 的文章 以及如何修改它以改善构造函数和 setter 的过度使用 特别是当对象具有大量属性 其中大部分属性是可选的 时 本文对此设计模式进行了简要总结
  • 我所有的 java 应用程序现在都会抛出 java.awt.headlessException

    所以几天前我有几个工作Java应用程序使用Swing图书馆 JFrame尤其 他们都工作得很好 现在他们都抛出了这个异常 java awt headlessexception 我不知道是什么改变了也许我的Java版本不小心更新了 谢谢你尽你
  • 用于请求带有临时缓存的远程 Observable 的 RxJava 模式

    用例是这样的 我想暂时缓存最新发出的昂贵的Observable响应 但在它过期后 返回到昂贵的源Observable并再次缓存它 等等 一个非常基本的网络缓存场景 但我真的很难让它工作 private Observable
  • Android ScrollView,检查当前是否滚动

    有没有办法检查标准 ScrollView 当前是否正在滚动 方向是向上还是向下并不重要 我只需要检查它当前是否正在滚动 ScrollView当前形式不提供用于检测滚动事件的回调 有两种解决方法可用 1 Use a ListView并实施On
  • 带 getClassLoader 和不带 getClassLoader 的 getResourceAsStream 有什么区别?

    我想知道以下两者之间的区别 MyClass class getClassLoader getResourceAsStream path to my properties and MyClass class getResourceAsStre
  • 什么是 Java2D 处理程序线程?

    我创建了一个使用 Hibernate 的示例 java 应用程序 当我进行线程转储时 我观察到一个名为 Java2D Disposer 的奇怪线程 有人能告诉我该线程的功能吗 AWT 系统中的某些实体需要最终确定以释放资源 最突出的例子是j
  • 如何让 Firebase 与 Java 后端配合使用

    首先 如果这个问题过于抽象或不适合本网站 我想表示歉意 我真的不知道还能去哪里问 目前我已经在 iOS 和 Android 上开发了应用程序 他们将所有状态保存在 Firebase 中 因此所有内容都会立即保存到 Firebase 实时数据
  • 在会话即将到期之前调用方法

    我的网络应用程序有登录的用户 有一个超时 在会话过期之前 我想执行一个方法来清理一些锁 我已经实现了sessionListener但一旦我到达public void sessionDestroyed HttpSessionEvent eve
  • 关闭扫描仪是否会影响性能

    我正在解决一个竞争问题 在问题中 我正在使用扫描仪获取用户输入 这是 2 个代码段 一个关闭扫描器 一个不关闭扫描器 关闭扫描仪 import java util Scanner public class JImSelection publ

随机推荐