我有一个字符串数组,如下所示:
someThing/one_text_0000_temperature****
another/two_text_0000_temperature****
where/three_text_0000_temperature****
我有变步。
int step
我需要用变量步骤中的数字替换那些 **** 。
步骤为94的输出示例:
someThing/one_text_0000_temperature0094
another/two_text_0000_temperature0094
where/three_text_0000_temperature0094
问题是*的数量正在改变。好吧,当程序运行时,每个字符串都是常量且相同的。但这些字符串来自文件。在下次启动程序时,*的数量可能不同,文件已更改。
我认为我将分三步完成:找到星数,格式化为字符串,最后用新字符串替换部分字符串
问题1) 如何找出星星的数量? 问题2) 如何将步变量格式化为动态长度字符串?不是这样的:String.format("%04d", step); // how to change that 4 if needed?
问题3)
如何用另一个字符串替换部分字符串String line = new String("someThing/one_text_0000_temperature****");
String stars = new String("****"); // as result of step 1
String stepString = new String("0094"); // as result of step 2
line = line.replace(stars, stepString);
非常感谢您提供的提示/帮助
被修改
感谢您的灵感。我确实在这里找到了一些更多的想法Simple way to repeat a String in java和我的最终代码:
int kolko = line.length() - line.indexOf("*");
String stars = String.format("%0"+kolko+"d", 0).replace("0", "*");
String stepString = String.format("%0"+kolko+"d", step);
我在HashMap中存储了行,所以我可以使用lambda
lines.replaceAll((k, v) -> v.replace(stars, stepString));
答案 0 :(得分:1)
首先尝试使用' 0'预先填充字符串,最后添加您的幻数。然后简单的子字符串将起作用,因为你知道你的' *'它们是从哪里开始的。
这也有效:
String s1 = "someThing/one_text_0000_temperature****";
String step = "94";
String v = "0000000000" + step;
String result = s1.substring(0, s1.indexOf('*')) + v.substring(v.length() - s1.length() - s1.indexOf('*'));
System.out.println(result);
答案 1 :(得分:0)
我试试这个:
String test = "test****"; //test: "test****"
int one = test.indexOf("*"); //one: 4
int two = test.lastIndexOf("*"); //two: 7
int nb = two-one; //nb: 3 two: 7 one: 4
String newTest= test.replace("*","0"); //newTest: "test0000"
String step = "12"; //step: "12"
newTest = newTest.substring(0,newTest.length()-step.length()); //newTest: "test00"
newTest += step; //newTest: "test001"
您还可以在' nb'之间添加尺寸检查。和' step.length()' 。如果step.length()高于你的号码或者' *'你做什么的?
答案 2 :(得分:0)
我为你的问题编写了这段代码:
int step = 94;
String[] input = new String[]{
"someThing/one_text_0000_temperature****",
"another/two_text_0000_temperature****",
"where/three_text_0000_temperature****"
};
for (String i : input) {
int start = i.indexOf('*');
int size = i.length() - start;
int stepsize = (step + "").length();
if(stepsize > size) {
throw new IllegalArgumentException("Too big step :D");
}
String result = i.replace('*', '0').substring(0, i.length() - stepsize) + step;
System.out.println(result);
}
我希望它对你有所帮助:)。