Tag: 字符串

Java的String.intern()的目的是什么?

我知道有两种方法可以在Java中创建String: String a = “aaa”; String b = new String(“bbb”); 第一种方式,Java肯定会在字符串池中创建一个String对象并引用它。 (假设“aaa”之前不在游泳池里。) 使用第二种方法,将在堆中创建一个对象,但是jvm还会在字符串池中创建一个对象吗? 在这篇关于Java字符串池的问题中 ,@ Jesper说: 如果你这样做: String s = new String(“abc”); 然后池中将有一个String对象,一个代表文字“abc”,>的对象,并且将有一个单独的String对象,而不是在池中,它包含池对象的>内容的副本。 如果那是真的,那么每次都使用new String(“bbb”); ,在池中创建一个对象“bbb”,这意味着通过上面的任何一种方式,java将始终在池中创建一个字符串对象。 那么intern()用于什么? 在文档http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#intern()中 ,它说: 调用实习方法时,如果池已经包含等于此字符串对象的字符串(由equals(Object)方法确定),则返回池中的字符串。 否则,将此String对象添加到池中,并返回对此String对象的引用。 这意味着有些字符串不在池中,这可能吗? 哪一个是真的?

字符串常量与Java Web应用程序中的资源包

从过去的一年开始,我们开发了一个应用程序,我们使用静态字符串常量来存储常量。 像public static final String PAYMENT_CHEQUE =“check”; 我在哪里要求ie在jsp页面中以及Action类我将引用上面的字符串常量我在考虑资源包之后想到的属性文件,我的问题是 如果我使用属性文件与静态字符串常量相比,是否有任何性能损失? 哪个更好的静态字符串常量和属性文件键值对? 这是个好主意我们在jsp中使用静态字符串常量(For Labeling)吗? 请建议我

如何在Java中找到两个相邻的重复数字并用一个数字替换它们?

我需要在字符串中找到两个相邻的重复数字,并用一个替换。 如何在Java中执行此操作。 一些例子: 123345应该是12345 77433211应该是74321

如何解析模糊字符串到日期?

我试图找出一种将String解析为Date对象的“简单”方法。 String可以是yyyyMMdd,yyyyMMddHHmm或yyyyMMddHHmmSS。 目前,我正在查看String的长度,并根据长度创建DateParser。 这样做有更优雅的方式吗?

如何删除Java中单个单词后面的所有标点符号?

我需要删除一个单词后面的标点符号。 例如, word?! 应更改为word和string:应更改为string 。 编辑:算法应该只删除字符串末尾的标点符号。 字符串中的任何标点都应该保留。 例如, doesn’t; 应该变成doesn’t 。

字符串a ==字符串b 的规则

我试图理解字符串池的工作原理以及字符串与另一个字符串相等的规则。 例如这个片段: public static void main(String[] hi){ String s1 = “lol”; String s2 = “lol”; String s3 = new String(“lol”); System.out.println( s1 == s2 );// true System.out.println( s2 == s3); // false s3.intern(); //line 1 System.out.println( s1 == s3); // false testString(s1); } private static void testString(String s1){ String s4 = “lol”; System.out.println( s1 == […]

从通配符到正则表达式

我想允许两个主要的通配符? 和*来过滤我的数据。 以下是我现在正在做的事情(正如我在许多网站上看到的): public boolean contains(String data, String filter) { if(data == null || data.isEmpty()) { return false; } String regex = filter.replace(“.”, “[.]”) .replace(“?”, “.”) .replace(“*”, “.*”); return Pattern.matches(regex, data); } 但是我们不应该逃避所有其他的正则表达式特殊字符,比如| 或(等等?还有,也许我们可以保留?和*如果它们前面有一个\ ?例如,类似于: filter.replaceAll(“([$|\\[\\]{}(),.+^-])”, “\\\\$1”) // 1. escape regex special chars, but ?, * and \ .replaceAll(“([^\\\\]|^)\\?”, “$1.”) // 2. replace any ? […]

如何“交叉”两个字符串(1234&abcd – > 12cd&ab34)

我正在开发一种Java中的遗传算法,就像所有这些算法一样,它需要两条父染色体的交叉。 这些染色体可以很长,从30到500不等(但无论它们长度如何,它们都将具有相同的大小,因此如果长度为80,则GA运行中的全部将为80)。 我想以不同的方式发展,但他们在我看来都非常低效,所以我想我可能会要求新的,不同的观点和建议。 例如,我认为的方法之一是将字符串转换为字符数组并从交叉轨迹的起点到终点迭代(即从s1 & s2[25]到s1 & s2[40] )复制将这些点之间的每个数组字符转换为时间数组,然后再次迭代并使用“伙伴”的时间数组中的字符交换它们。 但就像我说的那样,一个拥有大约1000条染色体并且大约1000代的人群的计划似乎非常缓慢。 以下是两点交叉的图示: 还有一个更简单的点交叉: 因为在Java中根本不是很先进,你可以建议我采取什么方法,可能是一个我不知道的Java函数,或者我可以实现的一些算法?

Java将哈希转换为随机字符串

我正在尝试开发一种在彩虹表生成器中使用的缩减function。 缩减函数背后的基本原理是它接受散列,执行一些计算,并返回一定长度的字符串。 目前我正在使用SHA1哈希,我需要返回一个长度为3的字符串。 我需要在任意三个随机字符上组成字符串: abcdefghijklmnopqrstuvwxyz0123456789 我面临的主要问题是我写的任何缩减函数总是返回已经生成的字符串。 一个好的缩减函数只会很少返回重复的字符串。 有人可以提出任何想法来实现这一目标吗? 或者对哈希到字符串操作的任何建议都会很棒。 提前致谢 玩笑

方法声明中三个点的含义是什么?

可能重复: Java,参数中有3个点 public static void getImages(String… folders) throws IOException{ } 在上面的getImages()方法中,为什么有三个点。 这是什么意思? 我搜索谷歌但找不到任何东西。