Java 删除/替换字符串值的部分

Java 删除/替换字符串值的部分,java,Java,我必须删除给定字符串中的单词 例如: 输入: "H|013450107776|10/15/2019 D|0000TXN001|10/15/2019|013450107806|LCUATADA05|1000.00|PAYMENT FOR SERVICE|Successful" "H|013450107776|10/15/2019 D|0000TXN001|10/15/2019|013450107806|LCUATADA05|1000.00|Successful" 输出: "H|01345010

我必须删除给定字符串中的单词

例如:

输入:

"H|013450107776|10/15/2019
D|0000TXN001|10/15/2019|013450107806|LCUATADA05|1000.00|PAYMENT FOR SERVICE|Successful"
"H|013450107776|10/15/2019
D|0000TXN001|10/15/2019|013450107806|LCUATADA05|1000.00|Successful"
输出:

"H|013450107776|10/15/2019
D|0000TXN001|10/15/2019|013450107806|LCUATADA05|1000.00|PAYMENT FOR SERVICE|Successful"
"H|013450107776|10/15/2019
D|0000TXN001|10/15/2019|013450107806|LCUATADA05|1000.00|Successful"
注意:
“服务付款”
是一个动态字符串值,可以是任何东西

我已尝试使用replace()和regex函数,但无法获得准确的输出。

在“|”上拆分字符串,并假设要替换的单词始终位于同一位置,下面的内容满足您的需要:

String s = "H|013450107776|10/15/2019D|0000TXN001|10/15/2019|013450107806|LCUATADA05|1000.00|PAYMENT FOR SERVICE|Successful";
String result = s.replace(s.split("\\|")[8], "");
System.out.println(result);
它打印出:

H | 01345010776 | 10/15/2019D | 0000TXN001 | 10/15/2019 | 013450107806 | LCUATADA05 | 1000.00 |成功


以下是我喜欢使用的技巧:

String input = "H|013450107776|10/15/2019D|0000TXN001|10/15/2019|013450107806|LCUATADA05|1000.00|PAYMENT FOR SERVICE|Successful";
System.out.println(input);
input = "|" + input + "|";
String output = input.replaceFirst("\\|PAYMENT FOR SERVICE\\|", "|");
output = output.substring(1, output.length()-1);
System.out.println(output);

看看这是如何工作的,考虑下面的输入:

A|B|C
假设我们要删除
A
。我们首先形成字符串:

|A|B|C|
然后,我们将
|A |
替换为
|
,给出:

|B|C|
最后,我们剥去最初添加的管道分离器,得出:

B|C

下面的代码将起作用

public static String replace(String original, String toRemove) {
    Arrays.stream(original.split("\\|"))
          .filter(s -> !(s.equals(toRemove)))
          .collect(Collectors.joining("|"));
}
首先,创建一个
,其中包含最初由
|
分隔的
字符串(

其次,对它们进行过滤,使
流中只保留不等于
toRemove
字符串


第三,使用带有连接字符的
连接
收集

将| |之间的所有大写单词替换为“|”

例如:“| A G SLG SD GSD G |”->“|”

input.replaceAll(“\\\\\[A-Z\\s]+\\\\\\\\”,“\\”)

\\s-任何空白符号 A-Z-A和Z之间的符号

更多信息:

publicstaticvoidmain(String[]args){
String str=“H | 01345010776 | 10/15/2019D | 0000TXN001 | 10/15/2019 | 013450107806 | LCUATADA05 | 1000.00 |服务付款|成功”;
String scut=“服务付款”;
System.out.println(str.substring(0,str.indexOf(scut))+str.substring(str.indexOf(scut)+scut.length()+1,str.length());
}
String str=“H | 01345010776 | 10/15/2019D | 0000TXN001 | 10/15/2019 | 013450107806 | LCUATADA05 | 1000.00 |服务付款|成功”;
System.out.println(str.replaceAll(“服务付款|)”,“”)`

您可以向我们展示您的代码吗?您可以使用管道“|”拆分输入字符串,然后在不附加要删除的输出的情况下对拆分后的输出进行concat。Regex与
replaceAll一起使用。类似于
s=s.replaceAll(“^(D\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\。您对删除的搜索是由元素的文本内容驱动的(即您知道要删除的文本),还是由字符串中某些文本的位置驱动的?嗨,Vadiraj,我的回答解决了您的问题吗?是的,它们是:D javaiMouse最好的东西
str.split(\\\\\\”)
而不是
str.split(\\\”)
这是一个优雅的解决方案。简洁易懂这可能比使用流的答案要好,流需要从字符串转换成流,然后再转换成字符串。我认为您的解决方案是错误的,因为它硬编码了“服务付费”
。OP提到这个字符串可能不同我猜你对这个问题的理解和我不同。我假设OP知道文本,但不知道位置。您假设了相反的情况,即文本不重要,但位置重要。可能是,但是输入看起来像CSV格式,因此我认为更可能是位置已知,而不是文本