2016-07-08 14 views
1

我有我的字符串定义为如何使用字符串函数将字符显示到字符串的特定索引?

文本1:文本2:文字3:文本4:text5

我想输出

文本1:文本2:文字3

使用String方法。

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

+2

你能解释一下你的问题呢?目前还不清楚你想要解决的问题是什么,因为你提供的例子太抽象了,而且没有足够具体的让人们提供一个很好的答案。 – Relequestual

回答

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; 
} 

或者不要的lastIndexOf每个电话之间使用substring,但使用限制索引范围的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:的数字,不在字符串中。

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

您可以使用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]; 

阵列“文本”现在包含在你把它放在顺序的句子。现在,您的翻译可以分析结构和更正:

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

输出:

"My name is Master Yoda" 

一个工作的翻译可能是朝着银河系一块又迈进了一步。

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) 
0

莫比试试这个行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:文本2:文字3

相关问题