2012-04-05 42 views
25

Xin chào Tôi đang cố xóa tất cả ký tự cụ thể khỏi chuỗi. Tôi đã và đang sử dụng String.Replace, NHƯNG CNTT KHÔNG NÓI và tôi không biết tại sao. Đây là mã hiện tại của tôi.cách xóa tất cả các cá thể của một ký tự cụ thể khỏi một chuỗi

public string color; 
    public string Gamertag2; 
    private void imcbxColor_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     uint num; 
     XboxManager manager = new XboxManagerClass(); 
     XboxConsole console = manager.OpenConsole(cbxConsole.Text); 
     byte[] Gamertag = new byte[32]; 
     console.DebugTarget.GetMemory(0x8394a25c, 32, Gamertag, out num); 
     Gamertag2 = Encoding.ASCII.GetString(Gamertag); 
     if (Gamertag2.Contains("^")) 
     { 
      Gamertag2.Replace("^" + 1, ""); 
     } 
     color = "^" + imcbxColor.SelectedIndex.ToString() + Gamertag2; 
     byte[] gtColor = Encoding.ASCII.GetBytes(color); 
     Array.Resize<byte>(ref gtColor, gtColor.Length + 1); 
     console.DebugTarget.SetMemory(0x8394a25c, (uint)gtColor.Length, gtColor, out num); 
    } 

Về cơ bản, truy xuất giá trị byte của chuỗi từ Xbox 360 của tôi, sau đó chuyển đổi thành dạng chuỗi. nhưng tôi muốn nó để loại bỏ tất cả các trường hợp "^" String.Replace dường như không hoạt động. Nó hoàn toàn không có gì. Nó chỉ để lại chuỗi như trước đây. Bất cứ ai có thể vui lòng giải thích cho tôi là tại sao nó thực hiện điều này?

+0

Bạn đã thử Biểu thức chính quy chưa? – Sandeep

+2

@ Biểu thức chính quy thông thường sẽ vượt quá một vấn đề đơn giản. – Amicable

Trả lời

51

Bạn phải gán giá trị trả về của String.Replace để dụ chuỗi ban đầu của bạn:

do đó thay vì (không cần cho Contains check)

if (Gamertag2.Contains("^")) 
{ 
    Gamertag2.Replace("^" + 1, ""); 
} 

chỉ này (những gì mà thần bí +1):

Gamertag2 = Gamertag2.Replace("^", ""); 
+4

@Ian - Tôi không bị thuyết phục. Trừ khi có một cái gì đó bạn không nói với chúng tôi, 'Gamertag2 = Gamertag2.Replace ("^"," ");' chắc chắn sẽ loại bỏ bất kỳ trường hợp nào của "^". Đặt một điểm ngắt sau 'String.Replace' và xem nó có xóa"^"khỏi' Gamertag2' hay không. – climbage

+2

một chuỗi là bất biến - có nghĩa là bạn cần phải gán nó cho một cái gì đó. .Replace sẽ trả về một chuỗi mới. – Shumii

10

Hai điều:

1) C# Chuỗi không thay đổi. Bạn sẽ cần thực hiện việc này:

Gamertag2 = Gamertag2.Replace("^" + 1, ""); 

2) "^" + 1? Tại sao anh làm điều này? Về cơ bản bạn đang nói Gamertag2.Replace("^1", ""); mà tôi chắc chắn không phải là những gì bạn muốn.

1

Giống như leo lên đã nói, vấn đề của bạn chắc chắn là

Gamertag2.Replace("^"+1,""); 

Dòng đó sẽ chỉ xóa các trường hợp "^ 1" khỏi chuỗi của bạn. Nếu bạn muốn xóa tất cả các phiên bản "^", những gì bạn muốn là:

Gamertag2.Replace("^",""); 
Các vấn đề liên quan