Преобразовать название часового пояса в название города (удалить часть континента) - PullRequest
1 голос
/ 26 сентября 2011

Мне было интересно, может ли кто-нибудь помочь мне разобраться, чтобы удалить часть строки.Я использую java.util.TimeZone для получения «идентификаторов» часовых поясов, но я хочу удалить континент / префикс, в основном убирая название города.Я также должен заменить все подчеркивания пробелами, которые я уже сделал в коде.Я просто не могу найти способ избавиться от обратной косой черты и всего, что было до нее.Вот мой кодСпасибо

import java.util.*;
import java.util.TimeZone;
import java.util.Date;
import java.text.DateFormat;

public class Maps {

public static void main(String[] args) {

  String[] Zone = TimeZone.getAvailableIDs();

  int i = 0;

   for (i =0 ; i< Zone.length; i++) {
    String zone1 = Zone[i].replaceAll("_"," "); 

    System.out.println(zone1);
   }   
 }        
}

Ответы [ 5 ]

4 голосов
/ 26 сентября 2011

То есть вы хотите удалить все до первой косой черты, а затем заменить любые подчеркивания в оставшейся части пробелами? Это довольно легко, используя indexOf, substring и replace (о которых вы уже знаете).

Вы, конечно, могли бы сделать это с помощью регулярных выражений, как предложено Mr_Spock, но лично для всего лишь пары операций я бы придерживался обычных строковых методов:

int slash = text.indexOf('/');
text = text.substring(slash + 1).replace("_", " ");

Итак, для полного примера:

import java.util.TimeZone;

public class Test {

    public static void main(String[] args) {        
        String[] ids = TimeZone.getAvailableIDs();

        for (String id : ids) {
            int slash = id.indexOf('/');
            String stripped = id.substring(slash + 1).replace("_", " ");
            System.out.println(stripped);
        }
    }   
}

Обратите внимание, что это все еще оставляет вас с некоторыми интересными именами, такими как "Северная Дакота / Beulah", так как у оригинального идентификатора было две косые черты.

Просто для полноты, другой способ обработки косой черты состоит в том, чтобы разбить строку на косой черте, а затем взять вторую часть - но, как показывает приведенный выше пример, вы, вероятно, захотите убедиться, что она разбивается на не более две части, сохраняя «Северная Дакота / Беула» как один жетон. Вы также должны быть осторожны в случае, если были какие-либо идентификаторы без косых черт any (приведенный выше код отлично работает, так как indexOf вернет -1, поэтому подстрока станет неактивной).

2 голосов
/ 26 сентября 2011

Я бы попытался подойти к этому неортодоксальным способом для среднего Java-кодера (я полагаю).Я бы попробовал использовать силу регулярных выражений.

Попробуйте исследовать мир java.util.regex

Это не такБыло бы больно узнавать о RegEx, так как он используется в решениях по управлению строками по всем направлениям.

Надеюсь, это поможет.

0 голосов
/ 26 сентября 2011
 if(zone1.indexOf("/")!=-1) {
        zone1=zone1.substring(zone1.indexOf("/")+1,zone1.length());
        System.out.println(zone1);
    }
0 голосов
/ 26 сентября 2011

Вы можете использовать просто разделить зону: -

String zone1 = Zone[i];
zone1 = (zone1.split("/").length > 1) ? zone1.split("/")[1] : zone1.split("/")[0];
zone1 = zone1.replaceAll("_"," "); 
0 голосов
/ 26 сентября 2011

Проверьте это:

              public static void main(String[] args) {

        String[] Zone = TimeZone.getAvailableIDs();

         int i = 0;

       for (i =0 ; i< Zone.length; i++) {
        String zone1 = Zone[i].replaceAll("_"," ");

        if(zone1.indexOf('/') != -1)
          zone1 = zone1.substring(zone1.indexOf('/')+1);

        System.out.println(zone1);
       }   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...