2017-08-06 77 views
3

我想从原始文件中读取数据并替换文本中的格式。如何从原始文件读取并在String.format中使用

比如...在一个原始文件是这样的:

hello {0}, my name id {1}, my age is {2}.... 

当我使用的String.format,如下图所示,文字失去了它的缩进。

String data = readTextFile(this, R.raw.input); 
data = String.format(data, "world", "josh", "3"); 

有没有人知道如何做到这一点,而不会失去缩进?

+0

月1日,我认为这'{0} {1} ...'将无法正常工作,Java使用'% d'代表数字,'%s'代表字符串,第二,你们通过'文本失去缩进'是什么?你能发布预期产出和实际产出吗? – Yazan

+0

你为什么要使用文件? https://stackoverflow.com/a/20887690/2308683 –

+0

因为我有一个大文本... – chaim

回答

0

我发现我的问题的解决方案。

有一个在一个多变量需要,这是不可能分配到相同的变量

String data = readTextFile(this, R.raw.input); 
String output = String.format(data, "world", "josh", "3"); 
1

您提供的代码看起来更像String.format,例如从C#。在Java中的String.format不能以这种方式工作,它更像printf。

你可以操纵你的输入看起来像这样。

String input = "hello %s, my name id %s, my age is %s"; 
String.format(input, "world", "josh", "3"); 

输出: hello world, my name id josh, my age is 3

缩进应该是相同的

编辑

如果你想用括号您可以使用MessageFormat.format代替String.format

String messageInput = "hello {0}, my name id {1}, my age is {2}"; 
MessageFormat.format(messageInput,"world", "josh", "3"); 
+0

其实Java支持... https://stackoverflow.com/questions/5324007/java-equivalent-of-蟒蛇格式 –

+0

对,很好提及一个'MessageFormat' – robinloop

+0

是否有可能在括号中使用多次, 我的意思是: String messageInput =“你好{0},我的名字是{1},我的年龄是{0}“; MessageFormat.format(messageInput,“world”,“josh”); – chaim

0

可以使用Regular Explessions与模式类似:"{/d++}"

String format (String input, String... args) { 
    Pattern p = Pattern.compile("{/d++}"); 
    String[] parts = p.split(input); 
    StringBuilder builder = new StringBuilder(""); 
    int limit = Math.min(args.length, parts.length); 
    for(int i = 0; i < limit; i++){ 
     builder.append(parts[i]).append(args[i]); 
    } 
    return builder.toString(); 
} 
相关问题