J'ai besoin de trouver la ligne désirée qui commence par «c» et se termine par une date donnée.
Par exemple: je veux trouver le 05/02/2019 pour que la ligne ressemble à: c025z190205
. Donc, les seules choses que je connais sont c
et date
.
C'est juste un exemple pour que je puisse entrer n'importe quelle date et cela devrait m'imprimer cette ligne particulière.
Le fichier texte ressemble à ceci:
try { String DIR_SOURCE = "http://www.nbp.pl/kursy/xml/dir.txt"; URL url = new URL(DIR_SOURCE); URLConnection con = url.openConnection(); InputStream is = con.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); } catch (Exception e) { e.printStackTrace(); }
Je l'ai déjà dans BufferedReader
. Je ne sais pas si je devrais regex
ou quelque chose, si oui, à quoi ça va ressembler?
c001z190102 h001z190102 a001z190102 b001z190102 c002z190103 h002z190103 a002z190103 c003z190104 h003z190104 a003z190104 c004z190107 h004z190107 a004z190107 c005z190108 h005z190108 a005z190108 c006z190109 h006z190109 a006z190109 b002z190109 c007z190110 h007z190110 a007z190110 c008z190111 h008z190111 a008z190111 c009z190114 h009z190114 a009z190114 c010z190115 h010z190115 a010z190115 c011z190116 h011z190116 a011z190116 b003z190116 c012z190117 h012z190117 a012z190117 c013z190118 h013z190118 a013z190118 c014z190121 h014z190121 a014z190121 c015z190122 h015z190122 a015z190122 c016z190123 h016z190123 a016z190123 b004z190123 c017z190124 h017z190124 a017z190124 c018z190125 h018z190125 a018z190125 c019z190128 h019z190128 a019z190128 c020z190129 h020z190129 a020z190129 c021z190130 h021z190130 a021z190130 b005z190130 c022z190131 h022z190131 a022z190131 c023z190201 h023z190201 a023z190201 c024z190204 h024z190204 a024z190204 c025z190205 h025z190205 a025z190205 c026z190206 h026z190206 a026z190206 b006z190206 c027z190207 h027z190207 a027z190207 c028z190208 h028z190208 a028z190208 c029z190211 h029z190211 a029z190211 c030z190212 h030z190212 a030z190212 c031z190213 h031z190213 a031z190213 b007z190213 c032z190214 h032z190214 a032z190214 c033z190215 h033z190215 a033z190215 c034z190218 h034z190218 a034z190218 c035z190219 h035z190219 a035z190219 c036z190220 h036z190220 a036z190220 b008z190220 c037z190221 h037z190221 a037z190221 c038z190222 h038z190222 a038z190222 c039z190225 h039z190225 a039z190225 c040z190226 h040z190226 a040z190226 c041z190227 h041z190227 a041z190227 b009z190227 c042z190228 h042z190228 a042z190228 c043z190301 h043z190301 a043z190301 c044z190304 h044z190304 a044z190304 c045z190305 h045z190305 a045z190305 c046z190306 h046z190306 a046z190306 b010z190306 c047z190307 h047z190307 a047z190307 c048z190308 h048z190308 a048z190308 c049z190311 h049z190311 a049z190311 c050z190312 h050z190312 a050z190312 c051z190313 h051z190313 a051z190313 b011z190313 c052z190314 h052z190314 a052z190314 c053z190315 h053z190315 a053z190315 c054z190318 h054z190318 a054z190318 c055z190319 h055z190319 a055z190319 c056z190320 h056z190320 a056z190320 b012z190320 c057z190321 h057z190321 a057z190321 c058z190322 h058z190322 a058z190322 c059z190325 h059z190325 a059z190325 c060z190326 h060z190326 a060z190326 c061z190327 h061z190327 a061z190327 b013z190327 c062z190328 h062z190328 a062z190328 c063z190329 h063z190329 a063z190329 c064z190401 h064z190401 a064z190401 c065z190402 h065z190402 a065z190402 c066z190403 h066z190403 a066z190403 b014z190403 c067z190404 h067z190404 a067z190404 c068z190405 h068z190405 a068z190405 c069z190408 h069z190408 a069z190408 c070z190409 h070z190409 a070z190409 c071z190410 h071z190410 a071z190410 b015z190410 c072z190411 h072z190411 a072z190411 c073z190412 h073z190412 a073z190412 c074z190415 h074z190415 a074z190415 c075z190416 h075z190416 a075z190416 c076z190417 h076z190417 a076z190417 b016z190417 c077z190418 h077z190418 a077z190418 c078z190419 h078z190419 a078z190419 c079z190423 h079z190423 a079z190423
3 Réponses :
use:
Pattern pattern = Pattern.compile("^c(.)*[0-9]{6}$");
Mais c'est pour un rendez-vous non? Je veux trouver pour une date donnée.
Comment cela répond-il à la question?
Si vous recherchez une date spécifique, vous savez comment créer le début de la chaîne, vous pouvez donc faire:
String stringToFind = buildString(date); String line; while ((line = br.readLine()) != null) { if (line.startsWith(stringToFind)) { // do something... break; } }
Vous pouvez utiliser l'API Java Stream pour filtrer les lignes et générer une expression régulière pour la ligne que vous voulez trouver:
private Pattern getIdentifier(String start, LocalDate date) { return Pattern.compile(start + ".*" + date.format(DateTimeFormatter.ofPattern("YYMMdd"))); }
Cet exemple utilise LocalDate
, mais vous pouvez facilement changer cela en une chaîne, ou ce que vous aimez. La méthode getIdentifier ()
peut ressembler à ceci:
URL url = new URL("http://www.nbp.pl/kursy/xml/dir.txt"); URLConnection conn = url.openConnection(); Pattern identifier = getIdentifier("c", LocalDate.of(2019, Month.FEBRUARY, 5)); try (BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) { reader.lines() .filter(line -> identifier.matcher(line).matches()) .forEach(System.out::println); }
Le modèle pour votre exemple serait c. * 190205
.
La classe String a les méthodes
startsWith
etendsWith
. Jetez un œil à ceux-ci.Qu'essayez-vous d'accomplir exactement? juste pour savoir si la ligne que vous voulez existe?
@matanper Il est nécessaire pour d'autres programmes, j'ai donc besoin de savoir à quoi il ressemble exactement.
Que veux-tu dire pour la retrouver? à la fin vous avez juste besoin d'un booléen qui dit existe ou pas? car il semble que vous connaissez déjà la valeur de cette ligne
@matanper je ne sais pas à quoi ça ressemble si je ne regarde pas la page dont je ne veux pas ...