Regex 如何使用Java8特性(流)迭代字符串并修改某些字段

Regex 如何使用Java8特性(流)迭代字符串并修改某些字段,regex,lambda,java-8,stream,java-stream,Regex,Lambda,Java 8,Stream,Java Stream,我想对单个字符串执行多个操作。我需要获取一个字符串并使用分隔符提取不同的子字符串;,然后再次使用分隔符提取不同的子字符串:,如果字段匹配,则更新字段,并最终将其与原始状态连接,例如:firstName:Saroj;电邮:saroj@gmail.com;eaOldId;城市:;center:com.test.center::0/69将变成:firstName:xxxxxx;电邮:xxxxx@xxxx.com;eaOldId;城市:;中心:com.test.center::0/69 这个问题的基本需

我想对单个字符串执行多个操作。我需要获取一个字符串并使用分隔符提取不同的子字符串;,然后再次使用分隔符提取不同的子字符串:,如果字段匹配,则更新字段,并最终将其与原始状态连接,例如:firstName:Saroj;电邮:saroj@gmail.com;eaOldId;城市:;center:com.test.center::0/69将变成:firstName:xxxxxx;电邮:xxxxx@xxxx.com;eaOldId;城市:;中心:com.test.center::0/69 这个问题的基本需求是我需要将我的一些必填字段[此处为'firstName','email']修改为['xxxxxx','xxxxx@xxx.com']. 我想加密敏感数据

我曾在一个主要班级尝试过以下传统方法

下面是我从属性文件中获取的数据[这里手动转换为所需对象]

如果您注意到字符串中存在多个[:],如center:com.test.center::0/69,我也需要注意这一点

我可以用Java8流做同样的事情吗。非常感谢您的帮助。谢谢

我可以在这里使用StringreplaceAll作为正则表达式单行选项:

String input = "firstName:Saroj;email:saroj@gmail.com;eaOldId;city:;center:com.test.Center::0/69";
System.out.println(input);
input = input.replaceAll("(?<=\\bfirstName:)[^;]+", "xxxxxx");
input = input.replaceAll("(?<=\\bemail:)[^@]+@[^;]+(\\.[^;]+)", "xxxxx@xxx$1");
System.out.println(input);
注意:我可能建议完全屏蔽电子邮件,即使用xxxxx@xxx.xxx,以避免泄露用户真实电子邮件地址的任何信息。通过显示域和/或子域之类的内容,您可能会更容易发现此信息。

我可能会在这里使用StringreplaceAll作为正则表达式单行选项:

String input = "firstName:Saroj;email:saroj@gmail.com;eaOldId;city:;center:com.test.Center::0/69";
System.out.println(input);
input = input.replaceAll("(?<=\\bfirstName:)[^;]+", "xxxxxx");
input = input.replaceAll("(?<=\\bemail:)[^@]+@[^;]+(\\.[^;]+)", "xxxxx@xxx$1");
System.out.println(input);

注意:我可能建议完全屏蔽电子邮件,即使用xxxxx@xxx.xxx,以避免泄露用户真实电子邮件地址的任何信息。通过显示域和/或子域之类的内容,您可能会更容易发现这些信息。

也许考虑到标准化格式,您可能想使用正则表达式?也许考虑到标准化格式,您可能想使用正则表达式?:毫无疑问,您的回答和建议是有意义的,但我希望动态数据应该来自属性文件名,以及它们的屏蔽值,这里我维护两个firstname,emai字段,但实际上15-20个字段需要从diff-diff类屏蔽。我们可以用Java8Stream优化上面的代码吗?。谢谢。上面的代码已经是优化的IMHO,我认为没有理由在这里使用流进行拆分。屏蔽完全不应该是动态的,而是对所有用户都应该是相同的,以便不向潜在攻击者提供有关这些字段的任何信息。注意:毫无疑问,您的回答和建议是有意义的,但我希望动态数据应该来自属性文件字段名及其屏蔽值,这里我维护twofirstName,emai字段,但实际上15-20个字段需要屏蔽diff-diff类。我们可以用Java8Stream优化上面的代码吗?。谢谢。上面的代码已经是优化的IMHO,我认为没有理由在这里使用流进行拆分。屏蔽不应该是动态的,而应该对所有用户都是相同的,这样就不会向潜在攻击者提供有关这些字段的任何信息。
String input = "firstName:Saroj;email:saroj@gmail.com;eaOldId;city:;center:com.test.Center::0/69";
System.out.println(input);
input = input.replaceAll("(?<=\\bfirstName:)[^;]+", "xxxxxx");
input = input.replaceAll("(?<=\\bemail:)[^@]+@[^;]+(\\.[^;]+)", "xxxxx@xxx$1");
System.out.println(input);
firstName:Saroj;email:saroj@gmail.com;eaOldId;city:;center:com.test.Center::0/69
firstName:xxxxxx;email:xxxxx@xxx.com;eaOldId;city:;center:com.test.Center::0/69