2011-12-03 9 views
11

Tengo un problema al tratar de resolver esto. Necesito para "fijar" algunos enlaces, aquí hay un ejemplo:Eliminar el texto de la cadena hasta que llegue a cierto carácter

  1. www.site.com/link/index.php?REMOVETHISHERE
  2. www.site.com/index.php?REMOVETHISHERE

Así que, básicamente, quiero eliminar todo hasta que llegue el? personaje. Gracias por tu ayuda.

+0

¿Se puede garantizar un único '?' en tu cadena? –

+0

Sí. Parapura ya publicó lo que quería, gracias. –

+0

@DanielMallott: si es una URL válida, * tiene * solo una '?' ... – Fischermaen

Respuesta

18
string s = @"www.site.com/link/index.php?REMOVETHISHERE"; 
s = s.Remove(s.LastIndexOf('?')); 
//Now s will be simply "www.site.com/link/index.php" 

debe hacerlo

+1

Gracias, exactamente lo que quería. Soy un idiota. Lo aceptaré en 9 minutos. –

+0

nitpicking, pero 'IndexOf' probablemente sería preferible a' LastIndexOf' – minnow

+0

@minnow why ??? Si la cadena tenía más de un '?' OP probablemente quiere el último –

2

Uso string.split.

string URL = "www.site.com/link/index.php?REMOVETHISHERE" 
var parts = URL.Split('?'); 

Entonces parts[0] contendrá "www.site.com/link/index.php" y parts[1] contendrá "REMOVETHISHERE". A continuación, puede usar la parte que desee.

Debe agregar comprobaciones para asegurarse de que hay dos partes antes de intentar acceder al segundo elemento de la matriz. Podría (por ejemplo) verificar que la cadena contenga "?" antes de intentar llamar al Split.

3

Aunque una operación de cadena correctamente diseñado va a funcionar, la forma más general para extraer información parcial URI es usar el tipo System.Uri que tiene métodos que encapsulan estas operaciones, por ejemplo

var uri = new Uri("http://www.site.com/link/index.php?REMOVETHISHERE"); 
var part = uri.GetLeftPart(UriPartial.Path); 

Esto transmitirá la intención de su código más claramente y usted volverá a utilizar una implementación actual que se sabe que funciona.

El constructor System.Uri lanzará una excepción si la cadena no representa un URI válido, pero de todos modos probablemente quiera invocar algún otro comportamiento en su programa si se ha encontrado un URI no válido. Para detectar un URI no válido, puede detectar la excepción o utilizar una de las sobrecargas TryCreate().

0

Para eliminar last?? " y todo después de que:

string input = @"www.site.com/link/index.php?REMOVETHISHERE"; 
    input = input.Remove(input.LastIndexOf('?')); 

    OR 

    string input = @"www.site.com/link/index.php?REMOVETHISHERE"; 
    input = input.Substring(0, input.LastIndexOf('?')); 

Ahora la salida será:

www.site.com/link/index.php 
Cuestiones relacionadas