2013-06-26 80 views
0

我已經搜索了很多以找到解決方案,但找不到任何東西。然而,我懷疑這是因爲我不知道要搜索什麼。將字符串中的某個字符替換爲其他字符

首先,我有一個字符串,我轉換爲一個數組。該字符串將被格式化,像這樣:

"99.28099822998047,68.375 118.30699729919434,57.625 126.49999713897705,37.875 113.94499683380127,11.048999786376953 96.00499725341797,8.5" 

我創建了以下代碼數組:

public static Array StringToArray(string String) 
    { 
     var list = new List<string>(); 
     string[] Coords = String.Split(' ', ','); 
     foreach (string Coord in Coords) 
     { 
      list.Add(Coord); 
     } 
     var array = list.ToArray(); 
     return array; 
    } 

現在我的問題是;我試圖找到一種方法將其轉換回字符串,格式相同。所以,我可以簡單地創建一個字符串:

public static String ArrayToString(Array array) 
    { 
     string String = string.Join(",", array); 
     return String; 
    } 

然後希望用空格(「」)替換每個第二個「,」。這可能嗎?或者有沒有其他方式可以做到這一點?

預先感謝您!我希望我的問題有道理。

+1

'StringToArray(字符串字符串)' - 更改參數名,這是非常* *誤導,當談到'String.Split(...)' 。 – James

+5

嗯......對於第一個函數,難道你只是寫'String.Split('',',');'而不是獲取數組,將其轉換爲列表,然後將其轉換回*數組? – Doorknob

+2

只使用輸入字符串。 –

回答

2

沒有內置的方法來做你所需要的。然而,實現你需要的東西是很微不足道的,例如,

public static string[] StringToArray(string str) 
{ 
    return str.Replace(" ", ",").Split(','); 
} 

public static string ArrayToString(string[] array) 
{ 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i <= array.Length-1; i++) 
    { 
     sb.AppendFormat(i % 2 != 0 ? "{0} " : "{0},", array[i]); 
    } 
    return sb.ToString(); 
} 
+0

非常感謝你!我做了一些simulair(基於rr-的鏈接)。奇蹟般有效。 –

2

如果這些都對座標,你可以通過分析他們像對開始,而不是像單獨的數字:

public static IEnumerable<string[]> ParseCoordinates(string input) 
{ 
    return input.Split(' ').Select(vector => vector.Split(',')); 
} 

更容易然後重建原始字符串:

public static string PrintCoordinates(IEnumerable<string[]> coords) 
{ 
    return String.Join(" ", coords.Select(vector => String.Join(",", vector))); 
} 

但是,如果您絕對需要將數據放在像陣列這樣的扁平結構中,則可以將其轉換爲更具結構化的格式:

public static IEnumerable<string[]> Pairwise(string[] coords) 
{ 
    coords.Zip(coords.Skip(1), (coord1, coord2) => new[] { coord1, coord2 }); 
} 

然後,您可以使用此方法與PrintCoordinates一起重建您的初始字符串。

+0

非常感謝,這確實是座標,但此刻我必須在一維數組中使用它們。但我一定會考慮將它們解析爲對,因爲它會更有意義,並且會更容易理解。謝謝 –

1

這是一條路線。我不認爲其他解決方案正在刪除最後的逗號或空格。我還包括一個測試。

public static String ArrayToString(Array array) 
{ 
    var useComma = true; 
    var stringBuilder = new StringBuilder(); 

    foreach (var value in array) 
    { 
     if (useComma) 
     { 
      stringBuilder.AppendFormat("{0}{1}", value, ","); 
     } 
     else 
     { 
      stringBuilder.AppendFormat("{0}{1}", value, " "); 
     } 

     useComma = !useComma; 
    } 

    // Remove last space or comma 
    stringBuilder.Length = stringBuilder.Length - 1; 

    return stringBuilder.ToString(); 
} 

[TestMethod] 
public void ArrayToStringTest() 
{ 
    var expectedStringValue = 
     "99.28099822998047,68.375 118.30699729919434,57.625 126.49999713897705,37.875 113.94499683380127,11.048999786376953 96.00499725341797,8.5"; 
    var array = new[] 
     { 
      "99.28099822998047", 
      "68.375", 
      "118.30699729919434", 
      "57.625", 
      "126.49999713897705", 
      "37.875", 
      "113.94499683380127", 
      "11.048999786376953", 
      "96.00499725341797", 
      "8.5", 
     }; 

    var actualStringValue = ArrayToString(array); 

    Assert.AreEqual(expectedStringValue, actualStringValue); 
} 
0

做的另一種方式:

string inputString = "1.11,11.3 2.22,12.4 2.55,12.8"; 
List<string[]> splitted = inputString.Split(' ').Select(a => a.Split(',')).ToList(); 
string joined = string.Join(" ", splitted.Select(a => string.Join(",",a)).ToArray()); 

「分裂」 名單看起來就像這樣:

1.11 11.3

2.22 12.4

2.55 12.8

「加盟」的字符串是一樣的「inputString」

0

這裏的另一種方法解決這個問題。

public static string ArrayToString(string[] array) 
    { 
     Debug.Assert(array.Length % 2 == 0, "Array is not dividable by two."); 

     // Group all coordinates as pairs of two. 
     int index = 0; 
     var coordinates = from item in array 
          group item by index++/2 
           into pair 
           select pair; 

     // Format each coordinate pair with a comma. 
     var formattedCoordinates = coordinates.Select(i => string.Join(",", i)); 

     // Now concatinate all the pairs with a space. 
     return string.Join(" ", formattedCoordinates); 
    } 

而且一個簡單的例子:

public static void A_Simple_Test() 
    { 
     string expected = "1,2 3,4"; 
     string[] array = new string[] { "1", "2", "3", "4" }; 
     Debug.Assert(expected == ArrayToString(array)); 
    } 
相關問題