[java] Replacefirst?

Pagina: 1
Acties:

  • craio
  • Registratie: November 2002
  • Laatst online: 09-06-2025
Ik had iets nodig dat een bepaald teken die in een String voorkomt kon veranderen in een String( dus de inhoud van die string). Na enig zoeken vond ik ReplaceFirst ,ik denk dat dit hetgeen kan doen dat ik nodig heb.
Het enige nadeel is dat ik niet begrijp hoe je replacefirst moet toepassen.
Waar komt de string waar in gezocht moet worden waar de string/char die moet vervangen worden en waar dan de vervangende string?


if(declared.indexOf(aanwezig1) >= 0){
declared.replaceFirst( specteken , name );
declare.setText( "" + gedeclared );
}

De bedoeling ervan is dat hij zoekt in de string 'declared' als de string 'aanwezig1' erin aanwezig is. Indien dit zo is moet hij in die string 'declared' de string 'specteken' vervangen door de string 'name' en vervolgens de herwerkte string 'declared' in de TextArea 'declare' zetten.
Dit veranderen blijkt niet te werken.
Wat doe ik verkeerd?

[ Voor 90% gewijzigd door craio op 08-02-2003 00:25 . Reden: updaten ]


  • roelio
  • Registratie: Februari 2001
  • Niet online

roelio

fruitig, en fris.

http://java.sun.com/j2se/...api/java/lang/String.html

Je bedoelt deze neem ik aan? De link die je geeft is een regex Matcher
De replace methoden van String zijn toch vrij logisch?

[ Voor 18% gewijzigd door roelio op 07-02-2003 22:49 ]

AMD Phenom II X4 // 8 GB DDR2 // SAMSUNG 830 SSD // 840 EVO SSD // Daar is Sinterklaas alweer!!


  • reskobon
  • Registratie: November 2001
  • Laatst online: 05-07 19:51
Klopt ja
replaceFirst(String regex, String replacement);

Komt recht uit de API en moet werken zoals jij het doet. Weet je zeker dat hij in het if-statement komt?

Leeg


  • craio
  • Registratie: November 2002
  • Laatst online: 09-06-2025
@robje : Ja want er staat normaal nog een else achter en die voert hij niet uit. Indien je in
declare.setText( "" + gedeclared );
setText vervangt door append komt de ongewijzigde tekst erbij.Dus geraakt hij in de if.
Zijn er misschien bepaalde regels verbonden aan die regex? De regex in dit geval is namelijk het teken '$'.

Verwijderd

In Java zijn Strings immutable wat betekend dat je de inhoud ervan niet kan veranderen. Een replaceFirst of iets dergelijks zal dus een nieuw String object opleveren waar wel de wijziging in doorgevoerd is. Er bestaat wel iets als een StringBuffer waarmee dit wel kan.

Voor jouw probleem is dit misschien een makkelijkere oplossing: je zoekt de eerste positie waar dat teken in voor komt (de index of uit je if-block doet dat) en met behulp van substring hak je de oorspronkelijke string in stukjes en plakt deze weer aan elkaar.

  • craio
  • Registratie: November 2002
  • Laatst online: 09-06-2025
@Infinitive: Bedankt voor het idee met substring gaat het wel

Verwijderd

craio schreef op 07 February 2003 @ 22:25:
Ik had iets nodig dat een bepaald teken die in een String voorkomt kon veranderen in een String( dus de inhoud van die string). Na enig zoeken vond ik ReplaceFirst ,ik denk dat dit hetgeen kan doen dat ik nodig heb.
Het enige nadeel is dat ik niet begrijp hoe je replacefirst moet toepassen.
Waar komt de string waar in gezocht moet worden waar de string/char die moet vervangen worden en waar dan de vervangende string?


if(declared.indexOf(aanwezig1) >= 0){
declared.replaceFirst( specteken , name );
declare.setText( "" + gedeclared );
}

De bedoeling ervan is dat hij zoekt in de string 'declared' als de string 'aanwezig1' erin aanwezig is. Indien dit zo is moet hij in die string 'declared' de string 'specteken' vervangen door de string 'name' en vervolgens de herwerkte string 'declared' in de TextArea 'declare' zetten.
Dit veranderen blijkt niet te werken.
Wat doe ik verkeerd?
Deze manier kan heel makkelijk wel werken alleen hou je er geen rekening mee dat Strings vaste objecten zijn en dat als je een string veranderd je dan een ander object hebt.

replaceFirst(....) retourneert een string die je vervolgens dan wel ergens moet opslaan anders gebeurt er niets.
je zal daarom alleen de 2e regel het volgende moeten toevoegen:

declared = declared.replaceFirst( specteken , name );

en hij zal moeten werken.
Pagina: 1