我有这个字符串
[23,22,17][17,2][23][3,29][][10,43,6][7][32,17,6][][][23,49,12][14,40,15][34,41,32][4,7,19][9,27][17][31,36,45][][32][40,27,25]
从json获得并将其保存到ArrayList中,如下所示:
ArrayList<?> listAdress=(ArrayList<?>)jobj.get("adress");
我想只取数字并将括号中的数字保存到这样的矢量中。
v[]={23,22,18}
v[]={17,2}
我试图只获取数字,但我不知道如何获取数字,直到你找到]
有人知道怎么做?
答案 0 :(得分:1)
这是您的问题所需的正则表达式:
(\d*,*)*
此正则表达式explanation的链接
下面是获取数字数组的java方法:
public static List<String []> getNumberArrays (String toBeProcessed){
List<String[]> listOfArrays = new ArrayList<String[]>();
Pattern p = Pattern.compile("(\\d*,*)*");
Matcher m = p.matcher(toBeProcessed);
while(m.find()){
String[] a ;
a =m.group(0).split(",");
// next statement for avoiding the printing of empty arrays
if(a.length>=2)
listOfArrays.add(a);
}
return listOfArrays;
}
测试代码:
String x = "[23,22,17][17,2][23][3,29][][10,43,6][7][32,17,6][][][23,49,12][14,40,15][34,41,32][4,7,19][9,27][17][31,36,45][][32][40,27,25]" ;
List<String[]> listOfArrays = new ArrayList<String[]>();
listOfArrays = getNumberArrays(x);
for(String[] a :listOfArrays){
System.out.println(Arrays.toString(a));
}
输出
[23, 22, 17]
[17, 2]
[3, 29]
[10, 43, 6]
[32, 17, 6]
[23, 49, 12]
[14, 40, 15]
[34, 41, 32]
[4, 7, 19]
[9, 27]
[31, 36, 45]
[40, 27, 25]
答案 1 :(得分:0)
我知道你要求使用正则表达式,但我不确定这是进行这种简单解析的唯一或最佳方法。
这是一个快速(而不是那么安全)的代码:
public class HelloWorld{
public static void main(String []args){
String input = "[23,22,17][17,2][23][3,29][][10,43,6][7][32,17,6][][][23,49,12][14,40,15][34,41,32][4,7,19][9,27][17][31,36,45][][32][40,27,25]";
input = input.substring(1, input.length()-1);
String[] vectors = input.split("\\]\\[");
for(String vector : vectors)
{
System.out.println(String.format("\"%s\"", vector));
}
}
}
输出:
&#34; 23,22,17&#34;
&#34; 17,2&#34;
&#34; 23&#34;
&#34; 3,29&#34;
&#34;&#34;
&#34; 10,43,6&#34;
&#34; 7&#34;
&#34; 32,17,6&#34;
&#34;&#34;
&#34;&#34;
&#34; 23,49,12&#34;
&#34; 14,40,15&#34;
&#34; 34,41,32&#34;
&#34; 4,7,19&#34;
&#34; 9,27&#34;
&#34; 17&#34;
&#34; 31,36,45&#34;
&#34;&#34;
&#34; 32&#34;
&#34; 40,27,25&#34;
问题是:您必须确保作为输入提供的字符串始终格式良好(以[,以a结尾]开头,并以[以[结尾]开头的段组成)。然而,正则表达式几乎相同(无效输入=无输出或部分输出)。
一旦你的字符串用逗号分隔数字,其余的工作就很容易了(你可以再次拆分然后解析为整数)。
答案 2 :(得分:0)
public void importarCorreos() throws Exception{
@SuppressWarnings("deprecation")
ClientRequest cr = new ClientRequest("http://di002.edv.uniovi.es/~delacal/tew/1415/practica02/servicio_correos.php");
@SuppressWarnings("deprecation")
String result = cr.get(String.class).getEntity(String.class);
CorreosService service = Factories.services.createCorreosService();
//Imprimimos todo el flujo JSON recibido en formato cadena.
System.out.println(result);
//Procesamos el texto JSON y lo pasamos a formato SIMPLE-JSON
Object obj=JSONValue.parse(result);
JSONArray correos = (JSONArray)obj;
ListIterator li = correos.listIterator();
while(li.hasNext()){
JSONObject jobj =(JSONObject) li.next();
Correo c = new Correo();
c.setFechaHora( Long.parseLong(jobj.get("fechahora").toString()));
c.setAsunto(jobj.get("asunto").toString());
c.setCuerpo(jobj.get("cuerpo").toString());
c.setCarpeta( Integer.parseInt(jobj.get("carpeta").toString()));
c.setLogin_user(usuario.getLogin());
ArrayList<?> listaDestinatarios=(ArrayList<?>)jobj.get("destinatarios");
service.saveCorreo(c);
}
}
这是我的功能,主要是我从这个网址获得了一封带有邮件的json。我使用该网址中的字段创建一个新邮件。但是Mails类中的一个字段是mail_contacts,你应该在其中保存每个联系人的地址,例如向量[1,2,3],这是来自地址的id。
那么如何将数字输入[],并将其保存到字段mail_contacts它的数组。
我可以像这样保存:
c.setMailAdress(Here i want an array with the numbers from each [])
答案 3 :(得分:0)
这是怎么回事:
public static void main(String[] args) {
String testStr = "[23,22,17][17,2][23][3,29][][10,43,6][7][32,17,6][][][23,49,12][14,40,15][34,41,32][4,7,19][9,27][17][31,36,45][][32][40,27,25]";
ArrayList<String[]> result = new ArrayList<>();
String[] resTmp = testStr.split("\\[|\\]\\["); // First split input into vectors
for (String vecDef: resTmp) // Then split each vector into a String[]
result.add(vecDef.split(","));
for (String[] s : result) { // result = ArrayList with an element for each vector
for (String ss : s) // Each element is an array of Strings each being a number
System.out.print(ss + " ");
System.out.println();
}
}
答案 4 :(得分:0)
@ulix
好的,这给了我想要的退出:
00:53:20,413 INFO [stdout](默认任务-6)23 22 17
00:53:20,414 INFO [stdout](默认任务-6)17 2
00:53:20,414 INFO [stdout](默认任务-6)23
00:53:20,416 INFO [stdout](默认任务-6)3 29
00:53:20,416 INFO [stdout](默认任务-6)
00:53:20,417 INFO [stdout](默认任务-6)10 43 6
但我想将每个位置从字符串保存到int数组中,如int v [] = {23,22,17}