[JAVA] Split string

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Snors
  • Registratie: Oktober 2007
  • Laatst online: 11-08 12:42
Hallo allemaal,

Als eerste wil ik iedereen nog bedanken voor de hulp bij mijn vorige probleem, ik ben hierdoor een hoop opgeschoten met mijn MSSQL Job Monitor. Eigelijk heb ik nog een klein probleempje en dat is de manier waarop de tijd en datum die als output gegeven worden van de query op de MSSQL database.

De waardes die terugkomen uit de query zijn bijvoorbeeld:
Tijd:
Java:
1
43000

Datum:
Java:
1
20101128


De strings waar deze waardes inzitten:
Tijd:
Java:
1
String tijdstring = rsRecent.getString("run_time");

Datum:
Java:
1
String tijdstring = rsRecent.getString("run_date");


Het vervelende aan de tijd is dat deze 5 OF 6 characters is als de tijd < 10 uren is weergeeft hij niet de eerste 0 . De datum wordt wel in een vast formaat weergegeven.

Ik heb al geprobeerd om gebruik te maken van de split string functie binnen java echter levert dit problemen op met de tijd omdat deze niet een vast aantal van cijfers heeft.
Java:
1
2
3
String testString = "043000";
    System.out.println(java.util.Arrays.toString(
        testString.split("(?<=\\G.{2})")


Wat ik uiteindelijk eigenlijk wil bereiken is dat de volgende waardes weergegeven worden:
Tijd:
Java:
1
04:30:00 alszijnde hh:mm:ss

Datum:
Java:
1
28/11/2010 alszijnde mm:dd:yyyy


Wie o wie kan mij een duwtje in de juiste richting geven.

Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • CT
  • Registratie: September 2001
  • Laatst online: 13-10 21:39

CT

📱💻 🎮 ⌚🖥

http://download.oracle.co...ext/SimpleDateFormat.html

en het Calendar object moeten je aardig op weg helpen :)

Acties:
  • 0 Henk 'm!

  • kluyze
  • Registratie: Augustus 2004
  • Niet online
M34nM4chin3 schreef op woensdag 01 december 2010 @ 12:56:
Het vervelende aan de tijd is dat deze 5 OF 6 characters is als de tijd < 10 uren is weergeeft hij niet de eerste 0 . De datum wordt wel in een vast formaat weergegeven.
Waarom is dit vervelend? Als het 5 characters zijn zet je er toch gewoon een 0 voor en dat heb je er 6.

Verder zou ik kijken of je in de query het date/time formaat niet kan veranderen, of is het datatype in de database een int misschien? Dan zou ik eerst het datatype gaan aanpassen naar een time datatype (afhankelijk van de database die je gebruikt).
Of kijken naar de specifieke datum/tijd functies van de taal die je gebruikt.

Acties:
  • 0 Henk 'm!

  • Snors
  • Registratie: Oktober 2007
  • Laatst online: 11-08 12:42
kluyze schreef op woensdag 01 december 2010 @ 13:10:
[...]
Waarom is dit vervelend? Als het 5 characters zijn zet je er toch gewoon een 0 voor en dat heb je er 6.

Verder zou ik kijken of je in de query het date/time formaat niet kan veranderen, of is het datatype in de database een int misschien? Dan zou ik eerst het datatype gaan aanpassen naar een time datatype (afhankelijk van de database die je gebruikt).
Of kijken naar de specifieke datum/tijd functies van de taal die je gebruikt.
Helaas heb ik niet de permissies om tabeleigenschappen in een database te veranderen, aangezien de tijd/datum gewoon als plain text in de string komen te staan kan ik het door middel van SimpleDateFormat omzetten. Ik ga dat nu even proberen maar ik denk dat dat de antwoord is op mijn vraag!

Alvast bedankt allemaal iig.

Acties:
  • 0 Henk 'm!

  • Snors
  • Registratie: Oktober 2007
  • Laatst online: 11-08 12:42
De datum heb ik inmiddels omgezet:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
                    String timerecent = rsRecent.getString("run_date");

                   try {
                       SimpleDateFormat sdfSource = new SimpleDateFormat("yyyyMMdd");
                        Date datee = sdfSource.parse(daterecent);
                        SimpleDateFormat sdfDestination = new SimpleDateFormat("dd/MM/yyyy");
                   daterecent = sdfDestination.format(datee);
                   p.print(daterecent);
                    }
                    catch(ParseException pe)
                    {
                    System.out.println("Parse Exception : " + pe);
                    }


Echter vraag ik me af hoe ik de lengte van een string kan berekenen, en vervolgens een if / else statement te maken die kijkt of de string 5 of 6 characters bevat. Zodra die 5 characters bevat dat hij dan een 0 aan het begin toevoegt.

Alvast bedankt allemaal!

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik herhaal: Gebruik de edit knop ( Afbeeldingslocatie: http://tweakimg.net/g/forum/images/icons/edit.gif ) als je iets toe te voegen hebt; je topic herhaaldelijk omhoogschoppen is niet nodig en die melding staat er niet voor niets:

Afbeeldingslocatie: http://tweakers.net/ext/f/93OGDVn8zio6RrIck1qYj8ne/full.png
M34nM4chin3 schreef op woensdag 01 december 2010 @ 15:10:
Echter vraag ik me af hoe ik de lengte van een string kan berekenen, en vervolgens een if / else statement te maken die kijkt of de string 5 of 6 characters bevat. Zodra die 5 characters bevat dat hij dan een 0 aan het begin toevoegt.
Moeilijk doen als 't makkelijk kan:
code:
1
my6charstring = Right(('0' + some5ormorecharstring),6)

[ Voor 32% gewijzigd door RobIII op 01-12-2010 15:17 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Snors
  • Registratie: Oktober 2007
  • Laatst online: 11-08 12:42
RobIII schreef op woensdag 01 december 2010 @ 15:13:
Ik herhaal: Gebruik de edit knop ( [afbeelding] ) als je iets toe te voegen hebt; je topic herhaaldelijk omhoogschoppen is niet nodig en die melding staat er niet voor niets:
Het gedeelte wat ik heb geplaatst is totaal niet relevant aan de post die ik volgens jou zou moeten editen. Dit zou kunnen zorgen voor verwarring. Ik post niet een nieuwe reply om mijn topic zo ver mogelijk omhoog te schoppen, ik post een nieuwe reply om mijn topic overzichtelijk te houden en informatie van elkaar te scheiden.
code:
1
my6charstring = Right(('0' + somestring),6)
Voegt hij op deze manier niet altijd een 0 toe? Dat is juist het probleem. Ik wil niet dat hij altijd een 0 toevoegt alleen als de string 5 characters bevat.

[ Voor 11% gewijzigd door Snors op 01-12-2010 15:17 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
M34nM4chin3 schreef op woensdag 01 december 2010 @ 15:15:
[...]


Het gedeelte wat ik heb geplaatst is totaal niet relevant aan de post die ik volgens jou zou moeten editen. Dit zou kunnen zorgen voor verwarring. Ik post niet een nieuwe reply om mijn topic zo ver mogelijk omhoog te schoppen, ik post een nieuwe reply om mijn topic overzichtelijk te houden en informatie van elkaar te scheiden.
Daarvoor hebben we een: [hr] ;)


Zie je? ;)
M34nM4chin3 schreef op woensdag 01 december 2010 @ 15:15:

Voegt hij op deze manier niet altijd een 0 toe? Dat is juist het probleem. Ik wil niet dat hij altijd een 0 toevoegt alleen als de string 5 characters bevat.
Al voeg je 1000 nullen toe, als je van het resultaat altijd maar de 6 meest rechtse tekens pakt hou je altijd een string van 6 tekens over ;)

Ik ben overigens niet erg thuis in JAVA maar is er geen PadLeft() achtige method van een string?

[ Voor 36% gewijzigd door RobIII op 01-12-2010 15:21 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 23:34
M34nM4chin3 schreef op woensdag 01 december 2010 @ 15:15:
[...]Voegt hij op deze manier niet altijd een 0 toe? Dat is juist het probleem. Ik wil niet dat hij altijd een 0 toevoegt alleen als de string 5 characters bevat.
code:
1
2
if string.first != "0" 
string = "0" + string;

of
code:
1
2
if string.length == 5 
string = "0" + string;

Misschien iets als dit proberen?

Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 22:40

Haan

dotnetter

RobIII schreef op woensdag 01 december 2010 @ 15:13:
[url="RobIII in "[JAVA]Argument met whitespace""]
Moeilijk doen als 't makkelijk kan:
code:
1
my6charstring = Right(('0' + some5ormorecharstring),6)
En waarom komt die mooie Right method vandaan? ;)

@caelorum: in Java is het String.length() (dus een methode van de string class)

@RobIII IC ;)

[ Voor 12% gewijzigd door Haan op 01-12-2010 15:24 ]

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Haan schreef op woensdag 01 december 2010 @ 15:21:
En waarom komt die mooie Right method vandaan? ;)
Check de language van het code-blok ;)

Even, wederom in pseudo code, een wat duidelijker blokje:

code:
1
2
3
4
5
int reqlen = 6; //Desired length of the output
char padchar = 'x'; //Char to pad the string with

tempstring = (new String(reqlen, padchar) + somestring); //Construct a new string with 'xxxxxx' + somestring
mystring = tempstring.Substring(tempstring.length - reqlen, reqlen); //Take the right 6 chars

Et voila, een "PadLeft()" method (in wording) die met willekeurige chars kan padden op elke gewenste lengte.

[ Voor 57% gewijzigd door RobIII op 01-12-2010 15:28 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 22:40

Haan

dotnetter

RobIII schreef op woensdag 01 december 2010 @ 15:23:
[...]

Check de language van het code-blok ;)

Even, wederom in pseudo code, een wat duidelijker blokje:

code:
1
2
3
4
5
int reqlen = 6;
char padchar = 'x';

tempstring = (new String(reqlen, padchar) + somestring);
mystring = tempstring.Substring(tempstring.length - reqlen, reqlen);

Et voila, een "PadLeft()" method (in wording) die met willekeurige chars kan padden op elke gewenste lengte.
niet zo scherp vandaag 8)7

[ Voor 10% gewijzigd door Haan op 01-12-2010 15:29 ]

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
*kuch*
RobIII schreef op woensdag 01 december 2010 @ 15:17:

Ik ben overigens niet erg thuis in JAVA maar is er geen PadLeft() achtige method van een string?
Ik kon 'm zo snel niet vinden, maar hij bestaat dus klaarblijkelijk :P

[ Voor 65% gewijzigd door RobIII op 01-12-2010 15:31 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 22:40

Haan

dotnetter

RobIII schreef op woensdag 01 december 2010 @ 15:29:
Ik kon 'm zo snel niet vinden, maar hij bestaat dus klaarblijkelijk :P
Hij bestaat ook niet, (iig niet in de standaard library, foutje van mij) ;) Maar beetje Googelen leert dat je daar ene Formatter voor dient te gebruiken in Java :)

[ Voor 6% gewijzigd door Haan op 01-12-2010 15:33 ]

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • Snors
  • Registratie: Oktober 2007
  • Laatst online: 11-08 12:42
RobIII schreef op woensdag 01 december 2010 @ 15:23:
[...]

Check de language van het code-blok ;)

Even, wederom in pseudo code, een wat duidelijker blokje:

code:
1
2
3
4
5
int reqlen = 6; //Desired length of the output
char padchar = 'x'; //Char to pad the string with

tempstring = (new String(reqlen, padchar) + somestring); //Construct a new string with 'xxxxxx' + somestring
mystring = tempstring.Substring(tempstring.length - reqlen, reqlen); //Take the right 6 chars

Et voila, een "PadLeft()" method (in wording) die met willekeurige chars kan padden op elke gewenste lengte.
Ik heb waarschijnlijk een typo gemaakt oid. alleen kan hem niet vinden:
Java:
1
2
3
4
5
6
                    String timerecent = rsRecent.getString("run_time");
                    int reqlen = 6; //Desired length of the output
                    char padchar = '0'; //Char to pad the string with

                    String tempstring = (new String(reqlen, padchar) + somestring); //Construct a new string with 'xxxxxx' + timerecent                 
timerecent = tempstring.Substring(tempstring.length - reqlen, reqlen); //Take the right 6 chars


Foutmelding:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
C:\Users\eu-it\Desktop\mssqljob\src\SqlJobMon.java:171: cannot find symbol
symbol  : constructor String(int,char)
location: class java.lang.String
                    String tempstring = (new String(reqlen, padchar) + timerecent); //Construct a new string with 'xxxxxx' + somestring
                                         ^
C:\Users\eu-it\Desktop\mssqljob\src\SqlJobMon.java:172: cannot find symbol
symbol  : variable length
location: class java.lang.String
                    timerecent = tempstring.Substring(tempstring.length - reqlen, reqlen); //Take the right 6 chars
                                                                ^
C:\Users\eu-it\Desktop\mssqljob\src\SqlJobMon.java:172: cannot find symbol
symbol  : method Substring(int,int)
location: class java.lang.String
                    timerecent = tempstring.Substring(tempstring.length - reqlen, reqlen); //Take the right 6 chars
                                           ^
3 errors

[ Voor 28% gewijzigd door Snors op 01-12-2010 16:00 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
M34nM4chin3 schreef op woensdag 01 december 2010 @ 15:46:

Ik heb waarschijnlijk een typo gemaakt oid. alleen kan hem niet vinden:
Je zag dat ik pseudo code postte?
En welke foutmelding(en) krijg je, etc. etc. etc. Of mogen we dat gaan raden?

Zo te zien wil je sowieso waarschijnlijk "somestring" vervangen door "timerecent" in code (en niet alleen in de comments ;) )

Edit: Nou; die foutmeldingen moet je prima zelf kunnen oplossen met een beetje basiskennis programmeren.

[ Voor 31% gewijzigd door RobIII op 01-12-2010 15:50 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Snors
  • Registratie: Oktober 2007
  • Laatst online: 11-08 12:42
RobIII schreef op woensdag 01 december 2010 @ 15:47:
[...]

Je zag dat ik pseudo code postte?
En welke foutmelding(en) krijg je, etc. etc. etc. Of mogen we dat gaan raden?

Zo te zien wil je sowieso waarschijnlijk "somestring" vervangen door "timerecent" in code (en niet alleen in de comments ;) )

Edit: Nou; die foutmeldingen moet je prima zelf kunnen oplossen met een beetje basiskennis programmeren.
Als ik het zou weten, zou ik het hier niet vragen maar allang zelf opgelost hebben. Uiteraard hoord er ook een stukje eigen inbreng bij maar zoals ik liet zien heb ik de date zelf kunnen omgooien ik begrijp alleen niet hoe ik een 0 ervoor kan zetten op het moment dat de string maar 5 chars bevat. Basisprogrammeren of niet, ik kom er op deze manier niet uit.

Tot zover vriendelijk bedankt allemaal!

Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 22:40

Haan

dotnetter

M34nM4chin3 schreef op woensdag 01 december 2010 @ 15:57:
[...]

Als ik het zou weten, zou ik het hier niet vragen maar allang zelf opgelost hebben. Uiteraard hoord er ook een stukje eigen inbreng bij maar zoals ik liet zien heb ik de date zelf kunnen omgooien ik begrijp alleen niet hoe ik een 0 ervoor kan zetten op het moment dat de string maar 5 chars bevat. Basisprogrammeren of niet, ik kom er op deze manier niet uit.

Tot zover vriendelijk bedankt allemaal!
Er zijn tig manieren om het te doen, waarvan RobIII's methode de meest omslachtige (maar wel de beste en meest generieke) is. Als je het gewoon heel 'dom' programmeert doe je gewoon:
Java:
1
2
3
4
5
String blaat = "blaat";
if (blaat.length() == 5)
{
    blaat = "0" + blaat;
}

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • Zamalan
  • Registratie: September 2007
  • Laatst online: 26-02-2015

Zamalan

Whine Connaisseur

Java:
1
String.format("%06d", deInteger);


Geeft een string representatie van een integer terug van 6 chars lang met voorloopnullen.

[ Voor 12% gewijzigd door Zamalan op 01-12-2010 16:31 ]

MSI GX660 --- i5 460M /// 4GB DDR3 /// Mobility Radeon HD5870 /// 1920x1080 /// 500GB


Acties:
  • 0 Henk 'm!

  • Snors
  • Registratie: Oktober 2007
  • Laatst online: 11-08 12:42
Haan schreef op woensdag 01 december 2010 @ 16:02:
[...]

Er zijn tig manieren om het te doen, waarvan RobIII's methode de meest omslachtige (maar wel de beste en meest generieke) is. Als je het gewoon heel 'dom' programmeert doe je gewoon:
Java:
1
2
3
4
5
String blaat = "blaat";
if (blaat.length() == 5)
{
    blaat = "0" + blaat;
}
Ik heb het op jou manier gedaan het werkt nu prima! 'Dom' programmeren of niet, de server waar dit script op draait kan wel tegen een paar if / if else statements. Super bedankt!
Zamalan schreef op woensdag 01 december 2010 @ 16:30:
Java:
1
String.format("%06d", deInteger);


Geeft een string representatie van een integer terug van 6 chars lang met voorloopnullen.
Heb bovenstaande al toegepast heel erg bedankt iig voor het meedenken! En uiteraard ook alle anderen!

Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 23:34
M34nM4chin3 schreef op woensdag 01 december 2010 @ 16:54:
[...]
Ik heb het op jou manier gedaan het werkt nu prima! 'Dom' programmeren of niet, de server waar dit script op draait kan wel tegen een paar if / if else statements. Super bedankt!
[...]
Heb bovenstaande al toegepast heel erg bedankt iig voor het meedenken! En uiteraard ook alle anderen!
Als je 9 en 10 posts eerder had gekeken had je gezien hoe je het kon oplossen. Weliswaar in pseudo-code maar het is geen rocket science om dat om te zetten toch?

Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
Haan schreef op woensdag 01 december 2010 @ 15:32:
[...]

Hij bestaat ook niet, (iig niet in de standaard library, foutje van mij) ;) Maar beetje Googelen leert dat je daar ene Formatter voor dient te gebruiken in Java :)
Of Apache Commons Lang library gebruiken in je project.
Pagina: 1