[JAVA] String.replace: karakters weghalen

Pagina: 1
Acties:

  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
Ik wil het volgende doen:

code:
1
2
3
String var = "1.11.1";
var = var.replace('.','');
int var_int = Integer.parseInt(var);


De waarde van var moet worden: 1111, dus zonder de puntjes. Het lukt me niet met de replace functie. De foutmelding is als volgt: Lexical Error: Empty character constant.

Hoe doe ik dit? Zie ik nu een methode uit String over het hoofd? Of is er een manier om een lege Character in die methode te gooien.

De resulterende variable moet door een Integer.parseInt, en die struikelt over de puntjes, vandaar dat ik ze eruit wil hebben.

  • momania
  • Registratie: Mei 2000
  • Laatst online: 22:44

momania

iPhone 30! Bam!

Tussen twee '-tekens moet een character staan, wat je krijgt is dus een compiler error...

Tip:
Je kan met de chararcter array van de string en met het Character object met de methode
isDigit(char c) kijken welke characters dus getallen zij...

Neem je whisky mee, is het te weinig... *zucht*


Verwijderd

Misschien is dit iets:

String var = "1.11.1";
var = var.replace('.' , ' '); // dus een spatie ipv niets
var = var.trim();
int var_int = Integer.parseInt(var);

Maar weet niet of dit gaat werken, want volgens de API haalt trim() alleen de spaties aan het begin en aan het einde van de String weg.

  • momania
  • Registratie: Mei 2000
  • Laatst online: 22:44

momania

iPhone 30! Bam!

Verwijderd schreef op 18 september 2002 @ 16:46:
Misschien is dit iets:

String var = "1.11.1";
var = var.replace('.' , ' '); // dus een spatie ipv niets
var = var.trim();
int var_int = Integer.parseInt(var);

Maar weet niet of dit gaat werken, want volgens de API haalt trim() alleen de spaties aan het begin en aan het einde van de String weg.
Dit geeft een NumberFormatException omdat de spaties er dan nog tussen staan...

Neem je whisky mee, is het te weinig... *zucht*


  • momania
  • Registratie: Mei 2000
  • Laatst online: 22:44

momania

iPhone 30! Bam!

probeer dit maar :

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
String var = "1.11.1";

// array'tje maken
char[] ar = var.toCharArray();

String tmp="";
// array'tje doorlopen en alleen de echt digits overnemen
for (int i=0; i<ar.length; i++) {
    if (Character.isDigit(ar[i])) {
        tmp+=ar[i];
    }
}
// hier weten we zeker dat we alleen digits
// hebben en kunnen we zonder problemen parsen
int var_int = Integer.parseInt(tmp);


Het zal misschien wel efficienter kunnen , maar dit is iig een makkelijke manier ;)

Neem je whisky mee, is het te weinig... *zucht*


Verwijderd

Ja, was ik al bang voor, maar waarom zeg je niet gewoon:

int var_int = "1111";
:P
Ik snap het doel er niet van, of is het gewoon testen van Strings en ints enzo?

  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
Verwijderd schreef op 18 september 2002 @ 16:52:
Ja, was ik al bang voor, maar waarom zeg je niet gewoon:

int var_int = "1111";
:P
Ik snap het doel er niet van, of is het gewoon testen van Strings en ints enzo?
:) HEt gebeurt op basis van gebruiker invoer. Ik kan er wel naast zetten: geen . en , invoeren. Maar als je de gemiddelde gebruiker kent ... :)

  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
momania schreef op 18 september 2002 @ 16:50:
probeer dit maar :

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
String var = "1.11.1";

// array'tje maken
char[] ar = var.toCharArray();

String tmp="";
// array'tje doorlopen en alleen de echt digits overnemen
for (int i=0; i<ar.length; i++) {
    if (Character.isDigit(ar[i])) {
        tmp+=ar[i];
    }
}
// hier weten we zeker dat we alleen digits
// hebben en kunnen we zonder problemen parsen
int var_int = Integer.parseInt(tmp);


Het zal misschien wel efficienter kunnen , maar dit is iig een makkelijke manier ;)
Als je het goed vindt 'quote' ik je code in mijn app :) Thnx a bunch. Tis wel meer werk, maar werkt gegarandeerd.

Verwijderd

Ow oke op die manier, dan is de oplossing van momania dus wel wat voor je :)
Succes ermee

  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
Ik hou me overigens aanbevolen voor een oplossing in 1 regel. Het stuk van momanie werkt perfect, maar ik ben nu benieuwd of iemand weet of het korter kan.

  • TheOneLLama
  • Registratie: Oktober 2000
  • Laatst online: 20-01-2022

TheOneLLama

A llama like no llama before

En daar komt ie dan weer.. StringBuffer gebruiken ipv een String.

oftwel:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
String var = "1.11.1";

// array'tje maken
char[] ar = var.toCharArray();

StringBuffer tmp="";
// array'tje doorlopen en alleen de echt digits overnemen
for (int i=0; i<ar.length; i++) {
    if (Character.isDigit(ar[i])) {
        tmp.append(ar[i]);
    }
}
// hier weten we zeker dat we alleen digits
// hebben en kunnen we zonder problemen parsen
int var_int = Integer.parseInt(tmp.toString());


Zelfs met 4 getallen is ie al sneller denk ik, maar stel dat je een langere reeks hebt dan scheelt het enorm in performance.

Opera OpenOffice.org Jabber Psi jabber://llama@mordax.com


  • TrendKiller
  • Registratie: Januari 2001
  • Laatst online: 02-07 13:03
In momania's code kan je ipv de String tmp beter een StringBuffer gebruiken met als maximum de lengte van de oorspronkelijke String . Dit is vooral performanter als je dit dikwijls gaat gebruiken.
Als je een String gebruikt, dan zal "under the hood" elke keer als je + doet, er een nieuwe String aangemaakt worden.

Dus eigenlijk zo:
code:
1
2
3
4
5
6
7
StringBuffer tmp= new StringBuffer(ar.length);
// array'tje doorlopen en alleen de echt digits overnemen
for (int i=0; i<ar.length; i++) {
    if (Character.isDigit(ar[i])) {
        tmp.append(ar[i]);
    }
}


just my 2 cents

  • momania
  • Registratie: Mei 2000
  • Laatst online: 22:44

momania

iPhone 30! Bam!

momania schreef op 18 september 2002 @ 16:50:
Het zal misschien wel efficienter kunnen , maar dit is iig een makkelijke manier ;)
TheOneLLama schreef op 18 september 2002 @ 16:58:
En daar komt ie dan weer.. StringBuffer gebruiken ipv een String.
Zie je wel ;) , ff vergeten |:(

Neem je whisky mee, is het te weinig... *zucht*


  • TheOneLLama
  • Registratie: Oktober 2000
  • Laatst online: 20-01-2022

TheOneLLama

A llama like no llama before

Ach, die vergeten we allemaal wel eens.. gelukkig zijn je mede GoTters dan zo vriendelijk met z'n 10en gelijk erop te duiken en binnen 60sec 20 posts met "StringBuffer!" erin te maken :D

Opera OpenOffice.org Jabber Psi jabber://llama@mordax.com


  • momania
  • Registratie: Mei 2000
  • Laatst online: 22:44

momania

iPhone 30! Bam!

TheOneLLama schreef op 18 september 2002 @ 17:11:
[...]


Ach, die vergeten we allemaal wel eens.. gelukkig zijn je mede GoTters dan zo vriendelijk met z'n 10en gelijk erop te duiken en binnen 60sec 20 posts met "StringBuffer!" erin te maken :D
:+

Neem je whisky mee, is het te weinig... *zucht*


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Je hoeft er trouwens helemaal geen chararray van te maken. Een stringbuffer kent wel de replace methode waar jij naar op zoek bent. ALs je er dus gelijk een stringbuffer van maakt is het probleem gelijk opgelost.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Ik zit eens effe te kijken. Je hebt het volgende staan:
code:
1
var = var.replace('.','');

Zou het misschien ook een idee zijn om ipv enkele gewoon dubbele quotes te gebruiken
Dus dit:
code:
1
var = var.replace(".","");

Never underestimate the power of


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Kun je niet gewoon een relevant mask op het input veld leggen?

Verwijderd

cameodski schreef op 18 september 2002 @ 17:23:
Ik zit eens effe te kijken. Je hebt het volgende staan:
code:
1
var = var.replace('.','');

Zou het misschien ook een idee zijn om ipv enkele gewoon dubbele quotes te gebruiken
Dus dit:
code:
1
var = var.replace(".","");
Nee, replace werkt alleen op chars. Je kunt replaceAll gebruiken (in 1.4) maar de implementatie van deze methode is nogal inefficient en daarom kun je beter een andere replace routine gebruiken (hier in /14 is daar wel eens een topic over geweest).

Pagina: 1