|
| Tekst streng Fra : Maxi |
Dato : 08-12-03 22:36 |
|
jeg har en tekst streng S= " Goddag allesammen. Imorgen er det bla lala
ngng". Nu ønsker jeg at fjerne ord1 som altid vil være case sensitive. ord1
= imorgen.
Problemet er så at hvordan kan jeg sørge for at fjerne ord1 uden at lave
S-sætningen case sensitive.
Nogen der har en bud på det. Jeg har prøvet med :
S = S.replaceFirst(ord1, ""); Men den kan så ikke fjerne ord1 i tekstr
strengen fordi det står med stort i (Imorgen)..
Håber I fik fat i problemet.
| |
Bertel Lund Hansen (08-12-2003)
| Kommentar Fra : Bertel Lund Hansen |
Dato : 08-12-03 22:54 |
|
Maxi skrev:
>jeg har en tekst streng S= " Goddag allesammen. Imorgen er det bla lala
>ngng". Nu ønsker jeg at fjerne ord1 som altid vil være case sensitive. ord1
>= imorgen.
>Problemet er så at hvordan kan jeg sørge for at fjerne ord1 uden at lave
>S-sætningen case sensitive.
Du kan lave en kopi af strengen som du lowcaser. Når du har
fundet ordet deri, ved du at det har samme position i originalen.
--
Bertel
http://bertel.lundhansen.dk/ FIDUSO: http://fiduso.dk/
| |
Maxi (09-12-2003)
| Kommentar Fra : Maxi |
Dato : 09-12-03 11:53 |
|
Det virker som en god løsning det vil jeg prøve at benytte.
> Du kan lave en kopi af strengen som du lowcaser. Når du har
> fundet ordet deri, ved du at det har samme position i originalen.
> --
> Bertel
| |
Thomas Winterberg (09-12-2003)
| Kommentar Fra : Thomas Winterberg |
Dato : 09-12-03 02:22 |
|
Her er et lille kode eksempel. Håber du kan bruge det til noget. Du skal
bare kalde metoden erstat. Den returnerer en string.
MVH
Thomas W
import java.util.*;
public class Test
{
String s = "Goddag imorgen allesammen. Imorgen er det bla bla";
public Test()
{
String a = erstat(s);
System.out.println(a);
}
public String erstat(String inString)
{
StringTokenizer st = new StringTokenizer(inString);
String token;
while (st.hasMoreTokens())
{
token = st.nextToken();
if (token.equals("imorgen")||token.equals("Imorgen"))
{
inString = inString.replaceAll("Imorgen","");
inString = inString.replaceAll("imorgen","");
}
}
return inString;
}
public static void main(String args[])
{
new Test();
}
}
"Maxi" <dilorjaan50@hotmail.com> skrev i en meddelelse
news:3fd4eea8$0$27391$edfadb0f@dread16.news.tele.dk...
> jeg har en tekst streng S= " Goddag allesammen. Imorgen er det bla lala
> ngng". Nu ønsker jeg at fjerne ord1 som altid vil være case sensitive.
ord1
> = imorgen.
> Problemet er så at hvordan kan jeg sørge for at fjerne ord1 uden at lave
> S-sætningen case sensitive.
> Nogen der har en bud på det. Jeg har prøvet med :
> S = S.replaceFirst(ord1, ""); Men den kan så ikke fjerne ord1 i tekstr
> strengen fordi det står med stort i (Imorgen)..
> Håber I fik fat i problemet.
>
>
| |
Bertel Lund Hansen (09-12-2003)
| Kommentar Fra : Bertel Lund Hansen |
Dato : 09-12-03 07:33 |
|
Thomas Winterberg skrev:
>Her er et lille kode eksempel. Håber du kan bruge det til noget. Du skal
>bare kalde metoden erstat. Den returnerer en string.
Ja, men det skriver de mulige kombinationer eksplicit, og hvis
man vil tage højde for at klamphuggere skriver "IMorgen" eller
"imorGen", bliver det lidt uhandy.
Derudover ville jeg hvad overskuelighed angik heller kode så
kaldet blev:
Test util=new Test();
util.erstat(s,"imorgen");
men det er en anden ting.
--
Bertel
http://bertel.lundhansen.dk/ FIDUSO: http://fiduso.dk/
| |
Maxi (09-12-2003)
| Kommentar Fra : Maxi |
Dato : 09-12-03 11:52 |
|
Hej Thomas
Problemmet er at sætningen nogen gange kan indeholde feks. to store
bogstaver som skal fjernes.feks IMorgen. Så jeg skal bruge en løsning der
fjerner ordet om det står med store eller små bogstaver.
"Thomas Winterberg" <thomasw@nork.auc.dk> wrote in message
news:br382k$ca9$1@sunsite.dk...
> Her er et lille kode eksempel. Håber du kan bruge det til noget. Du skal
> bare kalde metoden erstat. Den returnerer en string.
>
> MVH
>
> Thomas W
>
>
> import java.util.*;
>
> public class Test
> {
>
> String s = "Goddag imorgen allesammen. Imorgen er det bla bla";
>
> public Test()
> {
> String a = erstat(s);
> System.out.println(a);
> }
>
> public String erstat(String inString)
> {
> StringTokenizer st = new StringTokenizer(inString);
> String token;
>
> while (st.hasMoreTokens())
> {
> token = st.nextToken();
> if (token.equals("imorgen")||token.equals("Imorgen"))
> {
> inString = inString.replaceAll("Imorgen","");
> inString = inString.replaceAll("imorgen","");
>
> }
>
>
>
>
> }
>
> return inString;
>
> }
>
> public static void main(String args[])
> {
>
> new Test();
> }
>
>
>
> }
>
> "Maxi" <dilorjaan50@hotmail.com> skrev i en meddelelse
> news:3fd4eea8$0$27391$edfadb0f@dread16.news.tele.dk...
> > jeg har en tekst streng S= " Goddag allesammen. Imorgen er det bla lala
> > ngng". Nu ønsker jeg at fjerne ord1 som altid vil være case sensitive.
> ord1
> > = imorgen.
> > Problemet er så at hvordan kan jeg sørge for at fjerne ord1 uden at lave
> > S-sætningen case sensitive.
> > Nogen der har en bud på det. Jeg har prøvet med :
> > S = S.replaceFirst(ord1, ""); Men den kan så ikke fjerne ord1 i tekstr
> > strengen fordi det står med stort i (Imorgen)..
> > Håber I fik fat i problemet.
> >
> >
>
>
| |
Thomas Winterberg (09-12-2003)
| Kommentar Fra : Thomas Winterberg |
Dato : 09-12-03 19:04 |
|
Prøv med dette. Det er ganske rigtigt som Bertel siger, at det pæneste er at
lave et objekt af denne klasse og kalde metoden erstat med 2 parametre,
nemlig den samlede string s, og så det du vil have fjernet. Jeg har dog
samlet det hele i en klasse for nemhedens skyld.
import java.util.*;
public class Test
{
String s = "Goddag imorgen allesammen. Imorgen er det bla bla";
String ord = "Imorgen";
public Test()
{
String a = erstat(s,ord);
System.out.println(a);
}
public String erstat(String inString, String word)
{
StringTokenizer st = new StringTokenizer(inString);
StringBuffer sb = new StringBuffer("");
String token;
while (st.hasMoreTokens())
{
token = st.nextToken();
if (token.equals(word.toLowerCase()));
{
inString = inString.replaceAll(word,"");
}
}
return inString;
}
public static void main(String args[])
{
new Test();
}
}
MVH
Thomas W
"Maxi" <dilorjaan50@hotmail.com> skrev i en meddelelse
news:3fd5a95f$0$69931$edfadb0f@dread12.news.tele.dk...
> Hej Thomas
> Problemmet er at sætningen nogen gange kan indeholde feks. to store
> bogstaver som skal fjernes.feks IMorgen. Så jeg skal bruge en løsning der
> fjerner ordet om det står med store eller små bogstaver.
>
> "Thomas Winterberg" <thomasw@nork.auc.dk> wrote in message
> news:br382k$ca9$1@sunsite.dk...
> > Her er et lille kode eksempel. Håber du kan bruge det til noget. Du skal
> > bare kalde metoden erstat. Den returnerer en string.
> >
> > MVH
> >
> > Thomas W
> >
> >
> > import java.util.*;
> >
> > public class Test
> > {
> >
> > String s = "Goddag imorgen allesammen. Imorgen er det bla bla";
> >
> > public Test()
> > {
> > String a = erstat(s);
> > System.out.println(a);
> > }
> >
> > public String erstat(String inString)
> > {
> > StringTokenizer st = new StringTokenizer(inString);
> > String token;
> >
> > while (st.hasMoreTokens())
> > {
> > token = st.nextToken();
> > if (token.equals("imorgen")||token.equals("Imorgen"))
> > {
> > inString = inString.replaceAll("Imorgen","");
> > inString = inString.replaceAll("imorgen","");
> >
> > }
> >
> >
> >
> >
> > }
> >
> > return inString;
> >
> > }
> >
> > public static void main(String args[])
> > {
> >
> > new Test();
> > }
> >
> >
> >
> > }
> >
> > "Maxi" <dilorjaan50@hotmail.com> skrev i en meddelelse
> > news:3fd4eea8$0$27391$edfadb0f@dread16.news.tele.dk...
> > > jeg har en tekst streng S= " Goddag allesammen. Imorgen er det bla
lala
> > > ngng". Nu ønsker jeg at fjerne ord1 som altid vil være case sensitive.
> > ord1
> > > = imorgen.
> > > Problemet er så at hvordan kan jeg sørge for at fjerne ord1 uden at
lave
> > > S-sætningen case sensitive.
> > > Nogen der har en bud på det. Jeg har prøvet med :
> > > S = S.replaceFirst(ord1, ""); Men den kan så ikke fjerne ord1 i tekstr
> > > strengen fordi det står med stort i (Imorgen)..
> > > Håber I fik fat i problemet.
> > >
> > >
> >
> >
>
>
| |
Filip Larsen (09-12-2003)
| Kommentar Fra : Filip Larsen |
Dato : 09-12-03 22:11 |
|
Thomas Winterberg skrev
> Prøv med dette. Det er ganske rigtigt som Bertel siger, at det pæneste
er at
> lave et objekt af denne klasse og kalde metoden erstat med 2
parametre,
> nemlig den samlede string s, og så det du vil have fjernet. Jeg har
dog
> samlet det hele i en klasse for nemhedens skyld.
Nu kan jeg altså ikke dy mig længere, men bliver nødt til at påpege
følgende forhold i den kode du angiver:
> public String erstat(String inString, String word) {
> StringTokenizer st = new StringTokenizer(inString);
> StringBuffer sb = new StringBuffer("");
> String token;
>
> while (st.hasMoreTokens()) {
> token = st.nextToken();
> if (token.equals(word.toLowerCase()));
> {
> inString = inString.replaceAll(word,"");
> }
> }
> return inString;
> }
- Iterationen med StringTokenizer er formålsløs sammen med
String.replaceAll. Skulle iterationen have mening skulle man erstatte
token med det nye ord hvis det matchede, og derefter tilføje token til
en ny StringBuffer (som du måske også egentlig havde tænkt dig med
"sb"), og så slet ikke bruge String.replaceAll. Men så kan man kun
erstatte hele ord.
- Sammenligning af strenge hvor der ikke er forskel på store og små
bogstaver kan nemt gøres ved at bruge String.equalsIgnoreCase metoden.
Den konkrete sammenligning i din kode vil fx. aldrig virke hvis inString
indeholder "Imorgen".
- Metoden String.replaceAll kan ikke matche og erstatte simple ord uden
forskel på store og små bogstaver (ellers ville der jo slet ikke være
noget problem til at starte med). Så igen, den konkrete kode vil ikke
virke hvis inString indeholder word, blot med forskelle i store og små
bogstaver.
Mvh,
--
Filip Larsen
| |
|
|