J'ai ce fichier texte avec des valeurs de latitude et de longitude de différents points sur une carte.
Comment puis-je diviser ma chaîne en latitudes et longitudes? Quelle est la manière générale de faire ce type de choses qui sont avec d'autres délimiteurs comme espace ou tabulation, etc.?
Exemple de fichier: p> Ceci est le code que j'utilise pour lire à partir du fichier: p>
6 Réponses :
Vous pouvez utiliser le après cela, utilisez string.split () code>
Méthode: double.parsedouble () code>
méthode à Analysez la valeur de la chaîne à un double. p> double latitude = Double.parseDouble(tokens[0]);
double longitude = Double.parseDouble(tokens[1]);
Merci beaucoup. Travaillé comme un charme.
@ user1425223 Notez que string.split code> prend une regex et si vous voulez vous assurer que rien de drôle ne se produit (comme avec
. code> ou
| code> | code>). Passez le séparateur via
motif.Quote () code>:
str.split (motif.quote (".")) code> (ou échappez-le manuellement)
@AVD :: Avez-vous obtenu la première ligne dans votre fichier texte que vous avez montré ci-dessus? Je ne suis pas capable d'obtenir le contenu de la première ligne ... Reste tout va bien.
@ user3560140 Cet extrait de code explique l'utilisation de la méthode divisée code>. S'il vous plaît poser une nouvelle question si vous avez des problèmes avec votre code.
@AVD: Je suppose que la solution a été fournie pour lire les valeurs séparées des virgules à partir de fichier texte? Qu'il ne fait pas correctement. En lecture seule, il ne lit pas les premières valeurs dans ce fichier texte.so si quelqu'un l'utilisait comme un exemple Concentrer des problèmes de manière non cessée. Ce fut la raison de la mentionner à travers un commentaire.
Utilisez OPENCSV pour la fiabilité. La scission ne doit jamais être utilisée pour ce genre de choses.
Voici un extrait d'un programme de miens, c'est assez simple. Je vérifie si un caractère de délimitation a été spécifié et l'utilisez celui-ci s'il est, sinon j'utilise la valeur par défaut dans OpenCSV (une virgule). Ensuite, j'ai lu l'en-tête et les champs
Pour diviser votre chaîne par virgade (,) Utilisez str.split (",") code> et pour l'onglet Utilisez
str.split ("\\ t") code> < Pré> xxx pré> p>
// lat = 3434 & lon = yy38 & rd = 1.0 & | code> dans ce format O / P affiche
public class ReadText {
public static void main(String[] args) throws Exception {
FileInputStream f= new FileInputStream("D:/workplace/sample/bookstore.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(f));
String strline;
StringBuffer sb = new StringBuffer();
while ((strline = br.readLine()) != null)
{
String[] arraylist=StringUtils.split(strline, ",");
if(arraylist.length == 2){
sb.append("lat=").append(StringUtils.trim(arraylist[0])).append("&lon=").append(StringUtils.trim(arraylist[1])).append("&rt=1.0&|");
} else {
System.out.println("Error: "+strline);
}
}
System.out.println("Data: "+sb.toString());
}
}
Vous pouvez également utiliser la classe Java.Util.Scanner.
bigdecimal code>, pas double code> the Réponse par Adatapost a raison d'utiliser String :: Split code> mais faux sur l'utilisation de double code> pour représenter vos valeurs de latitude de longitude. Le float code> / float code> et double code> / double code> Types utilise technologie à point flottant qui Effectuer une précision de l'extérieur pour une vitesse d'exécution. p> Utilisez plutôt bigdecimal code>
pour représenter correctement Vos valeurs lat-longes. P>
Utilisez Apache Commons CSV em> bibliothèque h1> aussi, mieux pour laisser une bibliothèque telle que Apache Commons CSV em> Effectuez la corvée de la lecture et de l'écriture CSV ou Fichiers délimités par l'onglet "/a>. P> Exemple App h1>
Voici un exemple d'application complet à l'aide de celui Commons CSV em> bibliothèque. Cette application écrit alors lit un fichier de données. Il utilise String :: Split code> pour l'écriture. Et l'application utilise les objets bigdecimal code> pour représenter vos valeurs lat-longues. P> package work.basil.example;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
import org.apache.commons.csv.CSVRecord;
import java.io.BufferedReader;
import java.io.IOException;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.Instant;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
public class LatLong
{
//----------| Write |-----------------------------
public void write ( final Path path )
{
List < String > inputs =
List.of(
"28.515046280572285,77.38258838653564" ,
"28.51430151808072,77.38336086273193" ,
"28.513566177802456,77.38413333892822" ,
"28.512830832397192,77.38490581512451" ,
"28.51208605426073,77.3856782913208" ,
"28.511341270865113,77.38645076751709" );
// Use try-with-resources syntax to auto-close the `CSVPrinter`.
try ( final CSVPrinter printer = CSVFormat.RFC4180.withHeader( "latitude" , "longitude" ).print( path , StandardCharsets.UTF_8 ) ; )
{
for ( String input : inputs )
{
String[] fields = input.split( "," );
printer.printRecord( fields[ 0 ] , fields[ 1 ] );
}
} catch ( IOException e )
{
e.printStackTrace();
}
}
//----------| Read |-----------------------------
public void read ( Path path )
{
// TODO: Add a check for valid file existing.
try
{
// Read CSV file.
BufferedReader reader = Files.newBufferedReader( path );
Iterable < CSVRecord > records = CSVFormat.RFC4180.withFirstRecordAsHeader().parse( reader );
for ( CSVRecord record : records )
{
BigDecimal latitude = new BigDecimal( record.get( "latitude" ) );
BigDecimal longitude = new BigDecimal( record.get( "longitude" ) );
System.out.println( "lat: " + latitude + " | long: " + longitude );
}
} catch ( IOException e )
{
e.printStackTrace();
}
}
//----------| Main |-----------------------------
public static void main ( String[] args )
{
LatLong app = new LatLong();
// Write
Path pathOutput = Paths.get( "/Users/basilbourque/lat-long.csv" );
app.write( pathOutput );
System.out.println( "Writing file: " + pathOutput );
// Read
Path pathInput = Paths.get( "/Users/basilbourque/lat-long.csv" );
app.read( pathInput );
System.out.println( "Done writing & reading lat-long data file. " + Instant.now() );
}
}
Quatorze décimaux est probablement suffisant ... gis.stackexchange.com/a/8674
OpenCsv est une bibliothèque populaire si vous préférez utiliser cela. Détails ici: OPENCSV.SOURCEFORGE.net Il y a aussi quelques autres questions StackoverFlow sur un sujet similaire: - < Un href = "https://stackoverflow.com/questions/101100/csv-api-for-java"> Stackoverflow.com/questions/101100/csv-api-for-java - Stackoverflow.com/questions/200609/...