如何使用String函数将字符显示到String的特定索引?

时间:2016-07-08 08:52:45

标签: java string

我的字符串定义为

  

文本1:text2的:文字3:文本4:text5

我希望输出为

  

文本1:text2的:文字3

使用String方法。

我已尝试使用lastIndexOf,然后使用substring,然后再使用lastIndexOf。 我想两次调用lastIndexOf来避免这三个步骤 有没有更好的方法来实现这一目标?

5 个答案:

答案 0 :(得分:2)

您可以通过运行循环来迭代字符串的字符,从index = 0到index = lastIndexOf('3')。这是代码:

String s = "text1:text2:text3:text4:text5";
for(int i = 0; i < = s.lastIndexOf('3'); i++)
    System.out.print(s.charAt(i));

这为您提供了所需的输出。

输出

text1:text2:text3

答案 1 :(得分:1)

您可以使用Java split() - 方法:

String string = "text1:text2:text3:text4:text5";
String[] text = string.split(":");
String text1 = text[0]; 
String text2 = text[1];
String text3 = text[2];

然后直接生成输出或使用for循环生成输出:

// directly
System.out.println(text1 + ":" + text2 + ":" + text3);

// for-loop. Just enter, how many elements you want to display. 
for(int i = 0; i < 3; i++){
    System.out.println(text[i] + " ");
}

<强>输出:

text1 text2 text3

使用这种方法的好处是,您的输入和输出可能会稍微复杂一些,因为您可以打印单词的顺序。

示例:

考虑尤达大师。

他有一种奇怪的谈话方式,经常混淆句子结构。当他自我介绍时,他说(不正确!)的感觉:“尤达大师,我的名字是。”

现在,您想要创建一个通用翻译器 - 当然 - 修复从一个物种到另一个物种的错误。

您接受输入字符串并将其“划分”为其部分:

String string = "Master:Yoda:my:name:is"
String[] text = string.split(":");
String jediTitle = text[0];
String lastName = text[1]; 
String posessivePronoun = text[2];
String noun = text[3];
String linkingVerb = text[4];

数组“text”现在按照您输入的顺序包含句子。现在您的翻译人员可以分析结构并进行更正:

String correctSentenceStructure = posessivePronoun + " " + noun + " "  + linkingVerb + " "  + jediTitle + " " + lastName;    
System.out.println(correctSentenceStructure);

<强>输出:

"My name is Master Yoda"

工作翻译可能是迈向银河系的又一步。

答案 2 :(得分:1)

你可以尝试:

String test = "text1:text2:text3:text4:text5";
String splitted = text.split(":")
String result = "";
for (int i = 0; i <3; i++) {
    result += splitted[i] + ":"
}
result = result.substring(0, result.length() -1)

答案 3 :(得分:1)

正则表达式可用于识别字符串的正确部分:

private static Pattern PATTERN = Pattern.compile("([^:]*:){2}[^:]*(?=:|$)");

public static String find(String input) {
    Matcher m = PATTERN.matcher(input);
    return m.find() ? m.group() : null;
}

或者,不要在substring的每次调用之间使用lastIndexOf,而是使用限制索引范围的lastIndexOf版本:

public static String find(String input, int colonCount) {
    int lastIndex = input.length();
    while (colonCount > 0) {
        lastIndex = input.lastIndexOf(':', lastIndex-1);
        colonCount--;
    }
    return lastIndex >= 0 ? input.substring(0, lastIndex) : null;
}

请注意,此处colonCount是字符串中剩余的:的数量。

答案 4 :(得分:0)

Maby尝试这一行s.substring(0, s.lastIndexOf('3')+1);

完整示例:

package testing.project;

public class Main {

    public static void main(String[] args) {
        String s = "text1:text2:text3:text4:text5";
        System.out.println(s.substring(0, s.lastIndexOf('3')+1));
    }
}

输出:

  

文本1:text2的:文字3