我已经从一个公共网站提取了实时JavaScript数据进行处理,该网站每4秒更新一次数据。
数字需要更改为整数,以便它们可以映射到一个实时更新的椭圆半径。
以下链接是最接近解决方案的,但对我不起作用:
处理:如何将字符数据类型转换为utf-8 int表示?在java中将int转换为charJava:从char
中解析int值我代码:String url = "http://avail.mdx.ac.uk:8090/avail.js";
String[] site = loadStrings(url);
int[] list = int(split(site[0], ';'));
println(list[0]);
println(list[1]);
println(list[2]);
Prints:
0
0
0
我试图从以前使用
时打印的字符中获得整数String[] list = split(site[0], ';');
替换的int [] = int(分裂列表(网站[0 ], ';'));
作为一个测试,你可以交换它上面有更好的理解。所有代码都在
中void draw(){
}
我认为这是一个变量问题,'int'似乎不知道数据是从哪里来的,虽然当我尝试做:
String[] list = split(site[0], ';');
在同一个文件中,尽管错误代码:'duplicate local variable appear '。
在得到我的数字字符的字符串到整数的最佳方式映射到椭圆的任何解决方案?
根据我对链接的理解,这实际上是你试图复制的这个页面:
http://avail.mdx.ac.uk/也据我所知,你试图提取的数字是计算机的总数和使用的数量,这似乎是在avail变量从js文件的尾部数字,在你分割它有一个";"。如果你在那里分割,你会得到像"HESLGFOA01:84:32"这样的字符串,这基本上似乎归结为"ID:Total:Used"。因此,如果您再次获取该String并将其分解为其元素,无论您在哪里看到":",您都会得到一个包含三个元素的数组(下面代码中的elm), ID:"HESLGFOA01",Total:"84",Used:"32"。之后,您只需要将元素1和[2]转换为整型数即可获得数字!
作为旁注:availgroup变量包含有关引用上述相同ID的每个房间的信息,因此当我们找到包含该变量的字符串时,我们停止循环!
String url = "http://avail.mdx.ac.uk:8090/avail.js?";
// don't remove the questionmark otherwise the page won't update every time you run it
String [] site = loadStrings(url);
String [] list = split(site[0], ';');
for (int i = 0; i < list.length; i++) {
if (list[i].contains("availgroup")) break; //stops the loop
String [] elm = list[i].split(":");
String ID = elm[0];
int total = int(elm[1]);
int used = int(elm[2]);
println("Total: " + total + " Used:" + used + " Free: " + (total - used));
}
下面是该代码的简化版本,其中有更多注释来解释每一步。为了简单起见,这个只取第一个元素(第一个计算机房间)
void setup() {
// do this every 4 seconds as it is refreshed. We don't want to spam
// the website... This method changes how many times should draw() be
// executed per second. The default value is 24 frames per second. Here
// we set it to .25 which essentially means 1 draw() every 4 seconds...
frameRate(0.25);
}
void draw() {
// set the background to a boring gray colour...
background(204);
// set the website url. Don't forget the "http://"
String url = "http://avail.mdx.ac.uk:8090/avail.js?";
// get an array of big strings from the website, one element per line
// as it is in the page there is actually only one line...
String [] site = loadStrings(url);
// break the first line (site[0]) into an array of strings where
// there is a ";" and store the array into the 'list' variable
// Each element looks like this: "HESLGFOA01:84:32"
String [] list = split(site[0], ';');
// break the first element of list (list[0]) where there are ":" and
// store the result into the 'elm' variable
String [] elm = list[0].split(":");
// ID if the first element in the elm array (elm[0]): HESLGFOA01
String ID = elm[0];
// total is the second element in the elm array (elm[1]): 84
int total = int(elm[1]);
// used is the third element in the elm array (elm[2]) 32
int used = int(elm[2]);
// calculate the free desks by subtracting the used from the total
int free = total - used;
// print stuff / draw ellipses / do fun stuff
println("Total: " + total + " Used:" + used + " Free: " + free);
float x1 = map(mouseX, 0, width, 50, 150);
ellipse(x1, 75, 50, 50);
float x2 = map(free, 0, width, 0, 200);
ellipse(x2, 125, 50, 50);
}
为了保持整体的一致性,下面是当前可用性的第一部分:
var效果= " HESLBAOA01:61:20; HESLGFOA01:84:31 HESLGFLSS12A:十六6;HESLGFLSS12B:十六;HESLGFLSS13A: 16:0; HESLGFLSS13B: 16:0; HESL01OA01L: 52:22; HESL01LSS106:30:4; HESL01LSS111:10:3; HESL01LSS112:33:0; HESL01LSS118:59:26; HESL02OA01L: 11:4; HESL02LSS206:11:4; HESL02LSS216:14:4; HESL02LSS217:35:5; HESL02LSS219:6:3; HESL03LSS304:17:1; HESL03LSS305:33:5; HEWIGFOA01:36:25;卡尔:9:0";
我不知道这是否能解决你的问题,但也许它会给你指明正确的方向。java中编码的技巧是在字符串和字节数组之间进行转换。
byte[] dataFromJavaScript = {49,50,51,52};
String value = new String(dataFromJavaScript, Charset.forName("UTF-8"));
System.out.println(value);