查找整数与数组中的字符串对应的内容

时间:2016-07-22 20:58:03

标签: java arrays arraylist organization

我有一个像这样的字符串数组:

public ModeValue mode = new ModeValue("test_mode", "dog", new String[] {
        "cat", "dog", "rabbit", "horse", "bear", "fish", "bird", "snake"
}, this);

我想知道如何将每个字符串视为整数。例如:cat = 1,dog = 2,rabbit = 3等。然后我想通过使用该整数访问每个字符串。这将用在可以单击以切换模式的字符串列表中。

2 个答案:

答案 0 :(得分:0)

字符串数组已经允许您将整数与字符串映射。要获取与整数关联的字符串,只需在整数指示的索引处查找数组(例如MyArray[myInteger])。要获取与字符串关联的整数,请搜索数组并查找所需字符串出现的索引。请注意不要让字符串在数组中出现多次,因为这会阻止整数和字符串之间的1..1关联。

您不必为此使用数组 - 其他可索引的数据结构(如列表和哈希表)也可以使用。

这种数据结构称为查找表,并不常见。

答案 1 :(得分:0)

假设您的String数组是这样的,并且您正在用它初始化new String[] { "cat", "dog", "rabbit", "horse", "bear", "fish", "bird", "snake" } 对象:

String[] animals = new String[] {"cat", "dog", "rabbit", "horse", "bear", "fish", "bird", "snake"};
System.out.print(animals[0]); //cat
public ModeValue mode = new ModeValue("test_mode", "dog", animals, this);

现在,它是匿名声明的。您必须先使用名称声明它,以使用其名称和索引访问它。

例如:

ModeValue

如果没有关于mode的更多详细信息,我不确定如何帮助切换或如何访问get对象中的数组。您可以在ModeValue中实现public class ModeValue { private String[] animals; public getAnimals() { return animals; } } 方法以返回数组,这样您就可以正常访问它。

如何在ModeValue类中声明get方法的示例

String[] mainAnimals = mode.getAnimals();

像你的主要方法那样得到动物:

public class CameraPreview extends SurfaceView ... {

     .......

     public ArrayBlockingQueue<ByteBuffer> mProcessingQueue;

     public CameraPreview(){
           mProcessingQueue = new ArrayBlockingQueue<ByteBuffer>(10);
          HandlerThread handlerThread = new HandlerThread("Image Processing Thread");
          handlerThread.start();
          Handler handler = new Handler(handlerThread.getLooper());
          handler.post(new Runnable() {
              @Override
              public void run() {
                  new ImageProcessingThread().start();
              }
          });
      }


     public void onPreviewFrame(final byte[] data, Camera camera){

          .......

          if(!mProcessingQueue.offer(byteBuffer)) {
              byteBuffer.clear();
              Log.v("IMAGE_AVOIDED", count + "");
          } else {
              Log.v("IMAGE_PUSHED", count + "");
          }

     }

     public void processImage(ByteBuffer image){

          .. call to opencv jni function .. 

     }

     public class ImageProcessingThread extends Thread{
          int count = 0;

          @Override
         public void run() {
             super.run();

             while(mImageProcessingRunning){
                 try {
                     ByteBuffer image = mProcessingQueue.take();
                     Log.v("IMAGE_TAKEN", count++ + "");
                     processImage(image);
                     image.clear();
                 } catch (InterruptedException e) {
                     e.printStackTrace();
                 }
             }
         }
     }

}