我如何拆分这个字符串,这样我就只有键了:Java中的值?[已关闭]

wnavrhmk  于 2023-02-02  发布在  Java
关注(0)|答案(2)|浏览(101)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。

昨天关门了。
Improve this question
我有一个字符串charAndValue =“[文档类型:一份,本书,文档格式:A4]”
我尝试在代码中拆分,但得到了list中的第二个瓦尔,如

String charAndValue = "[Type of document : A copy, the book, Document format : A4]"

List<String> listVal = new ArrayList<>(Arrays.asList(charAndValue.split(", [A-Z]")));

拆分后,我得到了两个大小的列表:
1.“文件类型:一本,这本书”
1.“文档格式:A4英寸
问题是我的拆分不能正常工作。我的代码工作错误。从第二个键中删除大写字母。是的,我在代码中写了它,但我需要另一个选项

lndjwyie

lndjwyie1#

假设您有以下String:

"Articles: one, two, Price: 5"

你要把它分成:

"Articles: one, two"
"Price: 5"

您正在申请:

myString.split(", [A-Z]");

返回的原因:

"Articles: one, two"
"rice: 5"

是因为第二个字符串中的大写字母P,是你拆分的正则表达式的一部分.
相反,尝试将原始字符串更改为:

"Articles: one, two; Price: 5"

并适用于:

myString.split("; ");

这不会"移除"大写P,因为它不再是你拆分的部分。
编辑:

public static void main(String[] args) {
    String original = "Type: element, Document: false, Capitalized: true";
    String[] t = original.split(", [A-Z]");
    if ( t.length > 1 ) {
        for ( int i = 1; i < t.length; i++ ) {
            String tmp = t[i]; // get the splitted String
            char upChar = original.charAt(original.indexOf(tmp) - 1); // retrieve the uppercase char before the substring in the original char
            t[i] = upChar + tmp;
        }
    }
    for( String text: t) {
        System.out.println(text);
    }
}

这是假设你不能改变要拆分的符号,你可以用更少的代码行很容易地做到这一点,但是我把它拆分出来显示每一步。
在这一点上,我看到两个可能的问题:
1.输入字符串:
"试验:a,形式:A,宿舍:B "
这会导致

Test: a
Form: A
Form: B

这意味着您需要在此过程中操作"原始"值(或其临时副本)。
其次:

"Test: A, B, Form: A, Dorm: B"

如果目标是将其拆分为:

Test: A, B
Form: A
Dorm: B

第一行会引起麻烦的原因应该是显而易见的。它不仅会被视为一个分裂,而且是一个空白,怀疑你会找到B

4xrmg8kj

4xrmg8kj2#

我猜你想达到的目标是:

String[] newString = charAndValue.replaceAll("[\\[\\]]", "")
                                 .replaceAll("(.*)([,])(.*)", "$1#$3")
                                 .split("#");

这将导致字符串数组:

newString[0] = Type of document : A copy, the book
newString[1] = Document format : A4

一步一步:

  • .replaceAll("[\\[\\]]", "")-它修剪[]。注意,必须使用双反斜杠\\,因为这些字符在regex中是特殊字符
  • .replaceAll("(.*)([,])(.*)", "$1#$3")-在(captured group)中捕获组,稍后使用$numberOfGroup将其添加到替换结果中。还添加了分隔符#
  • .split("#")-使用上一步中提供的分隔符拆分已处理的字符串

相关问题