2014-01-06 182 views
0

在Java中,我需要在字符串中查找所有出現的字符串。獲取字符串中包含的所有字符串

例如。

String myString; 

myString = "Random_XML_Stuff_Here <tag k="name" v="Example Road"/> 
More_Random_XML_Stuff <tag k="name" v="Another name"/> More_XML_Stuff" Etc... 

所以我需要能夠去抓住內容了所有的路名。在第一個例子中,我需要能夠設置一個字符串爲「Example Road」。

僞代碼:

String streets = ""; 
while(more occurrences of street names exist) 
{ 
    streets = streets + "," + (street.occurrence of street name); 
} 

在上面的例子中,字符串將具有內容「示例道,另一個名稱」。

+0

你知道有針對Java的預先編寫的XML解析器,但你希望寫自己在這種情況下,正確的? – Kon

+0

您是否正在尋求針對特定格式(即)解決這個問題,還是您想要在較大的字符串中標識特定的給定字符串? –

+0

正確,這是我使用XML處理的唯一事情。如果可能,我想避免使用整個解析庫。 – User093203920

回答

1

你可以使用類似這樣String[] parseValue(String)功能

public static String[] parseValue(String in) { 
    String openTag = "<tag k=\"name\" v=\""; 
    int p1 = in.indexOf(openTag); 
    java.util.List<String> al = new java.util.ArrayList<String>(); 
    while (p1 > -1) { 
    int p2 = in.indexOf("\"/>", p1 + 1); 
    if (p2 > -1) { 
     al.add(in.substring(p1 + openTag.length(), p2)); 
    } else { 
     break; 
    } 
    p1 = in.indexOf(openTag, p2 + 1); 
    } 
    String[] out = new String[al.size()]; 
    return al.toArray(out); 
} 

public static void main(String[] args) { 
    String myString = "Random_XML_Stuff_Here <tag k=\"name\" v=\"Example Road\"/> " 
     + "More_Random_XML_Stuff <tag k=\"name\" v=\"Another name\"/>"; 
    System.out.println(java.util.Arrays 
     .toString(parseValue(myString))); 
} 

其輸出

[Example Road, Another name] 
0

由於您有固定的XML格式,因此您可以使用正則表達式匹配來查找提到的道路名稱。

Pattern roadNamePattern = Pattern.compile("v=\"(.*?)\"/>"); 
Matcher matcher = roadNamePattern.matcher(xmlString); 
while (matcher.find()) { 
    String roadName = matcher.group(1); 
} 
+0

同意,但可能會有其他「v = ...」匹配,因此可能會支付將「k =」name「」部分添加到模式中的部分。此外,名稱應該附加..這隻會給最後的比賽。 –

+0

是的,但是如果元素和/或屬性不是唯一的道路名稱,那麼我會使用XML解析器。否則,正則表達式會越來越複雜,而且......好吧,我認爲正則表達式對於這個任務而言仍然不是正確的方法。 –

1
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class welcome { 
    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     String text = "Random_XML_Stuff_Here <tag k=\"name\" v=\"Example Road\"/> More_Random_XML_Stuff <tag k=\"name\" v=\"Another name\"/> More_XML_Stuff"; 
     String road_string = GetRoadString(text); 
     System.out.println(road_string); 

    } 
    static String GetRoadString(String text) 
    { 
     Pattern pattern = Pattern.compile("<tag\\s+k=\"name\"\\s+v=\"(.*?)\"/>"); 
     Matcher matcher = pattern.matcher(text); 
     // using Matcher find(), group(), start() and end() methods 
     String road_string = ""; 
     while (matcher.find()) { 
      road_string = road_string + matcher.group(1)+ ","; 
     } 
     return road_string.substring(0, road_string.length()-1); 
    } 
} 

    enter code here 
0

回答以下問題使用python:

一個字符串中找到例如: I/P str ='aababbdf'
O/P:[('a',2),('b',1),('a',1),('b 」,2),( 'd',1),( 'F',1)]

i=j=total=0; 

data=[]; 
for i in range (0,len(str)): 
    count=0; 
    i = j; 
    if(total != len(str)): 
     for j in range (i,len(str)):    
      if str[i] == str[j]: 
       count=count+1; 
       total = total +1; 
       char=str[i]; 
      else: 
       break; 

     data.append((char,count)); 

print("\n data",data); 
相關問題