相关疑难解决方法(0)

如何拆分字符串,还要保留分隔符?

我有一个多行字符串,由一组不同的分隔符分隔:

(Text1)(DelimiterA)(Text2)(DelimiterC)(Text3)(DelimiterB)(Text4)
Run Code Online (Sandbox Code Playgroud)

我可以将这个字符串拆分成它的部分,String.split但是看起来我无法获得与分隔符正则表达式匹配的实际字符串.

换句话说,这就是我得到的:

  • Text1
  • Text2
  • Text3
  • Text4

这就是我要的

  • Text1
  • DelimiterA
  • Text2
  • DelimiterC
  • Text3
  • DelimiterB
  • Text4

是否有任何JDK方法使用分隔符正则表达式拆分字符串,但也保留分隔符?

java

224
推荐指数
11
解决办法
12万
查看次数

如何在Java中将CamelCase转换为人类可读的名称?

我想编写一个将CamelCase转换为人类可读名称的方法.

这是测试用例:

public void testSplitCamelCase() {
    assertEquals("lowercase", splitCamelCase("lowercase"));
    assertEquals("Class", splitCamelCase("Class"));
    assertEquals("My Class", splitCamelCase("MyClass"));
    assertEquals("HTML", splitCamelCase("HTML"));
    assertEquals("PDF Loader", splitCamelCase("PDFLoader"));
    assertEquals("A String", splitCamelCase("AString"));
    assertEquals("Simple XML Parser", splitCamelCase("SimpleXMLParser"));
    assertEquals("GL 11 Version", splitCamelCase("GL11Version"));
}
Run Code Online (Sandbox Code Playgroud)

java regex string camelcasing humanize

149
推荐指数
5
解决办法
6万
查看次数

Java分裂正在吃我的角色

我有这样的字符串String str = "la$le\\$li$lo".

我想拆分它以获得以下输出"la","le\\$li","lo".\ $是一个$转义所以它应该留在输出中.

但是,当我做 str.split("[^\\\\]\\$")ÿ得到"l","le\\$l","lo".

从我得到的我的正则表达式匹配$和i $然后删除.知道如何让我的角色回来吗?

谢谢

java regex string split

16
推荐指数
1
解决办法
4928
查看次数

背后的反向引用

你能在后视镜中使用反向引用吗?

假设我想split在我身后的任何地方重复两次角色.

    String REGEX1 = "(?<=(.)\\1)"; // DOESN'T WORK!
    String REGEX2 = "(?<=(?=(.)\\1)..)"; // WORKS!

    System.out.println(java.util.Arrays.toString(
        "Bazooka killed the poor aardvark (yummy!)"
        .split(REGEX2)
    )); // prints "[Bazoo, ka kill, ed the poo, r aa, rdvark (yumm, y!)]"
Run Code Online (Sandbox Code Playgroud)

使用REGEX2(其中反向引用嵌套在lookbehind中的前瞻)可以工作,但REGEX1在运行时会出现此错误:

Look-behind group does not have an obvious maximum length near index 8
(?<=(.)\1)
        ^
Run Code Online (Sandbox Code Playgroud)

这个排序是有意义的,我想,因为在一般的反向引用可以捕捉任何长度的字符串(如果正则表达式编译器是有点聪明,但是,它可以判断\1(.)在这种情况下,因此具有有限的长度).

那么有没有办法在后视镜中使用反向引用?

如果没有,你可以使用这个嵌套的前瞻来解决它吗?还有其他常用技术吗?

java regex backreference lookbehind

11
推荐指数
1
解决办法
1861
查看次数

如何在使用RegEx时保留分隔符?

我做了一个关于标点符号和正则表达式的问题,但这令人困惑.

我有这样的文字:

String text = "wor.d1, :word2. wo,rd3? word4!"; 
Run Code Online (Sandbox Code Playgroud)

我这样做:

String parts[] = text.split(" ");
Run Code Online (Sandbox Code Playgroud)

我有这个:

wor.d1, | :word2. | wor,d3? | word4!;
Run Code Online (Sandbox Code Playgroud)

有这个我需要做什么?(将符号保留在边界处,但仅限于我指定的:.,!?:,而不是全部).

wor,d1 | , | : | word2 | . | wor,d3 | ? | word4 | !
Run Code Online (Sandbox Code Playgroud)

UPDATE

我用这些正则表达式获得了一些好的结果,但它在一个单词开头的标点符号的所有分割之前给出了一个空的char.

有一种方法可以在一开始没有这个空的char?

这个正则表达式是好的还是有更简单的方法?

public static final String PUNCTUATION_SEPARATOR =
        "("
        + "("
        + "(?=^[\"'!?.,;:(){}\\[\\]]+)"
        + "|"
        + "(?<=^[\"'!?.,;:(){}\\[\\]]+)"
        + ")"
        + "|"
        + "("
        + "(?=[\"'!?.,;:(){}\\[\\]]+($|\n))"
        + "|"
        + "(?<=[\"'!?.,;:(){}\\[\\]]+($|\n))"
        + ")"
        + ")";
Run Code Online (Sandbox Code Playgroud)

java regex punctuation separator

7
推荐指数
1
解决办法
1045
查看次数

需要在java中将字符串拆分为两部分

我有一个字符串,其中包含一个连续的数字块,然后是一个连续的字符块.我需要将它们分成两部分(一个整数部分和一个字符串).

我尝试过使用String.split("\\D", 1),但它正在吞噬第一个角色.我检查了所有的String API,但没有找到合适的方法.

做这件事有什么方法吗?

java regex string lookaround regex-lookarounds

6
推荐指数
1
解决办法
7165
查看次数

自然语言中断的Split String

概观

我将字符串发送到文本到语音服务器,该服务器最多可接受300个字符.由于网络延迟,返回的每个语音段之间可能会有延迟,因此我希望尽可能在最"自然暂停"时打破语音.

每个服务器的请求花了我的钱,所以最好我会送的最长的字符串可能,直到达到最大允许的字符.

这是我目前的实施:

private static final boolean DEBUG = true;

private static final int MAX_UTTERANCE_LENGTH = 298;
private static final int MIN_UTTERANCE_LENGTH = 200;

private static final String FULL_STOP_SPACE = ". ";
private static final String QUESTION_MARK_SPACE = "? ";
private static final String EXCLAMATION_MARK_SPACE = "! ";
private static final String LINE_SEPARATOR = System.getProperty("line.separator");
private static final String COMMA_SPACE = ", ";
private static final String JUST_A_SPACE = " ";

public static ArrayList<String> splitUtteranceNaturalBreaks(String utterance) {

    final long …
Run Code Online (Sandbox Code Playgroud)

java regex string

6
推荐指数
1
解决办法
317
查看次数

java split()的问题

我有一个字符串:

strArray= "-------9---------------";
Run Code Online (Sandbox Code Playgroud)

我想从字符串中找到9.字符串可能是这样的:

strArray= "---4-5-5-7-9---------------";
Run Code Online (Sandbox Code Playgroud)

现在我只想找出字符串中的数字.我需要值9,4,或者这样的东西而忽略' - '.我尝试了以下方法:

strArray= strignId.split("-");
Run Code Online (Sandbox Code Playgroud)

但是它会出错,因为有多个' - '并且我没有得到我的输出.那么java应该使用什么功能呢?

我的输入和输出应如下:

input="-------9---------------";
    output="9";
input="---4-5-5-7-9---------------";
    output="45579";
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

java regex

3
推荐指数
2
解决办法
5580
查看次数

用正则表达式分割一个简单的数学表达式

我试图在1.5 + 4.2*(5 + 2)等方程式上运用正则表达式与运算符 - +*/所以输出将输入到数组中,这样我就可以单独解析

[0]1.5
[1]+
[2]4.2
[3]*
[4](
[5]5
[6]+
[7]2
[8]) 
Run Code Online (Sandbox Code Playgroud)

我已经发现,在\b将工作于1+2+3但是如果我有它不会分裂小数点.

我试过分裂,\b(\.\d{1,2})但它没有分裂小数点

java regex math

2
推荐指数
2
解决办法
1万
查看次数

如何将字符串拆分为单词,空格和换行符?

我正在使用Play框架并从textarea中获取文本,我想将其拆分为输入的单词,空格和换行符的数组.

你好世界如何

你是

会是这样的

a[0] = "Hello";
a[1] = " ";
a[2] = "World";
a[3] = " ";
a[4] = "How";
a[5] = "\n";
a[6] = "Are";
a[7] = " ";
a[8] = "You";
Run Code Online (Sandbox Code Playgroud)

如果有一个简单的正则表达方式或类似的东西,我很乐意听到它?

java string split

2
推荐指数
1
解决办法
2893
查看次数

java字符串拆分成数组,如何保存到同一个数组中的字符串?

例如: strEquation="36+5-8X2/2.5"

我的代码是:

String[] tmp = strEquation.split("[X\\+\\-\\/]+");

for(int i=0; i<tmp.length; i++)
    Log.d("Split array",tmp[i]);
Run Code Online (Sandbox Code Playgroud)

和我的输出,我认为它将是:

36
5
8
2
2.5
Run Code Online (Sandbox Code Playgroud)

我希望tmp字符串数组也会放入我正在拆分的字符,如下所示:

tmp[0] = 36
tmp[1] = +
tmp[2] = 5
tmp[3] = -
tmp[4] = 8
tmp[5] = X
tmp[6] = 2
tmp[7] = /
tmp[8] = 2.5
Run Code Online (Sandbox Code Playgroud)

知道怎么做吗?

java arrays string android

2
推荐指数
1
解决办法
2572
查看次数

基于正则表达式拆分字符串但保留分隔符

我正在尝试使用各种字符作为分隔符来分割字符串,并将这些分隔符保留在它们自己的数组索引中.例如,说我要拆分字符串:

if(x> 1)返回x*fact(x-1);

使用'(','>',')','*',' - ',';' 和'\ s'作为分隔符.我希望输出为以下字符串数组:{"if","(","x",">","1",")","return","x","*","事实","(","x"," - ","1",")",";"}

我到目前为止使用的正则表达式是 split("(?=(\\w+(?=[\\s\\+\\-\\*/<(<=)>(>=)(==)(!=)=;,\\.\"\\(\\)\\[\\]\\{\\}])))")

它会在每个单词字符处分开,而不管它是否跟在其中一个分隔符之后.例如

测试+ 1

输出{"t","e","s","t +","1"}而不是{"test +","1"}

为什么它会在每个角色上分裂,即使该角色没有被我的一个分隔符跟着?也是一个正则表达式,甚至可以在Java中实现这一点?谢谢

java regex split delimiter

1
推荐指数
1
解决办法
1622
查看次数

使用正则表达式在java上拆分数字字符串

我想在Java上使用正则表达式来分割数字字符串.我使用在线正则表达式测试器测试正则表达式是对的.但在Java中是错误的.

Pattern pattern = Pattern.compile("[\\\\d]{1,4}");
String[] results = pattern.split("123456");
// I expect 2 results ["1234","56"]
// Actual results is ["123456"]
Run Code Online (Sandbox Code Playgroud)

我有什么遗失的吗?


我知道这个问题很无聊.但我想解决这个问题.回答

Pattern pattern = Pattern.compile("[\\d]{1,4}");
String[] results = pattern.split("123456");
// Results length is 0
System.out.println(results.length);
Run Code Online (Sandbox Code Playgroud)

不管用.我试过了.它不会返回结果.请在回答之前尝试一下.

真诚地感谢帮助我的人们.


解:

Pattern pattern = Pattern.compile("([\\d]{1,4})");
Matcher matcher = pattern.matcher("123456");
List<String> results = new ArrayList<String>();
while (matcher.find()) {
    results.add(matcher.group(1));
}
Run Code Online (Sandbox Code Playgroud)

输出2结果["1234","56"]

java regex

0
推荐指数
1
解决办法
2538
查看次数